home *** CD-ROM | disk | FTP | other *** search
MacBinary | 1993-10-25 | 19.8 KB | [TEXT/MPS ] |
open in:
MacOS 8.1
|
Win98
|
DOS
browse contents |
view JSON data
|
view as text
This file was processed as: MacBinary
(archive/macBinary).
Confidence | Program | Detection | Match Type | Support
|
---|
66%
| dexvert
| Compact Compressed (Unix) (archive/compact)
| ext
| Supported |
10%
| dexvert
| MacBinary (archive/macBinary)
| fallback
| Supported |
1%
| dexvert
| Text File (text/txt)
| fallback
| Supported |
100%
| file
| MacBinary II, inited, Mon Oct 25 20:59:20 1993, modified Mon Oct 25 20:59:20 1993, creator 'MPS ', type ASCII, 19581 bytes "TRIANGLE.C" , at 0x4cfd 428 bytes resource
| default (weak)
| |
99%
| file
| data
| default
| |
74%
| TrID
| Macintosh plain text (MacBinary)
| default
| |
25%
| TrID
| MacBinary 2
| default (weak)
| |
100%
| lsar
| MacBinary
| default
|
|
id metadata |
---|
key | value |
---|
macFileType | [TEXT] |
macFileCreator | [MPS ] |
hex view+--------+-------------------------+-------------------------+--------+--------+
|00000000| 00 0a 54 52 49 41 4e 47 | 4c 45 2e 43 00 00 00 00 |..TRIANG|LE.C....|
|00000010| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000020| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000030| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000040| 00 54 45 58 54 4d 50 53 | 20 01 00 00 00 00 00 00 |.TEXTMPS| .......|
|00000050| 00 00 00 00 00 4c 7d 00 | 00 01 ac a8 f2 26 e8 a8 |.....L}.|.....&..|
|00000060| f2 26 e8 00 00 08 00 00 | 00 00 00 00 00 00 00 00 |.&......|........|
|00000070| 00 00 00 00 00 00 00 00 | 00 00 81 81 9f 91 00 00 |........|........|
|00000080| 2f 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |/*******|********|
|00000090| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000000a0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000000b0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|000000c0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 0d 2a 20 |********|*****.* |
|000000d0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 74 | | t|
|000000e0| 72 69 61 6e 67 6c 65 2e | 63 0d 2a 0d 2a 20 20 54 |riangle.|c.*.* T|
|000000f0| 68 69 73 20 6d 6f 64 75 | 6c 65 20 69 6d 70 6c 65 |his modu|le imple|
|00000100| 6d 65 6e 74 73 20 70 72 | 69 6d 69 74 69 76 65 73 |ments pr|imitives|
|00000110| 20 66 6f 72 20 74 72 69 | 61 6e 67 6c 65 73 20 61 | for tri|angles a|
|00000120| 6e 64 20 73 6d 6f 6f 74 | 68 20 74 72 69 61 6e 67 |nd smoot|h triang|
|00000130| 6c 65 73 2e 0d 2a 0d 2a | 20 20 66 72 6f 6d 20 50 |les..*.*| from P|
|00000140| 65 72 73 69 73 74 65 6e | 63 65 20 6f 66 20 56 69 |ersisten|ce of Vi|
|00000150| 73 69 6f 6e 20 52 61 79 | 74 72 61 63 65 72 0d 2a |sion Ray|tracer.*|
|00000160| 20 20 43 6f 70 79 72 69 | 67 68 74 20 31 39 39 33 | Copyri|ght 1993|
|00000170| 20 50 65 72 73 69 73 74 | 65 6e 63 65 20 6f 66 20 | Persist|ence of |
|00000180| 56 69 73 69 6f 6e 20 54 | 65 61 6d 0d 2a 2d 2d 2d |Vision T|eam.*---|
|00000190| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000001a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000001b0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000001c0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000001d0| 2d 2d 2d 2d 2d 2d 2d 2d | 0d 2a 20 20 4e 4f 54 49 |--------|.* NOTI|
|000001e0| 43 45 3a 20 54 68 69 73 | 20 73 6f 75 72 63 65 20 |CE: This| source |
|000001f0| 63 6f 64 65 20 66 69 6c | 65 20 69 73 20 70 72 6f |code fil|e is pro|
|00000200| 76 69 64 65 64 20 73 6f | 20 74 68 61 74 20 75 73 |vided so| that us|
|00000210| 65 72 73 20 6d 61 79 20 | 65 78 70 65 72 69 6d 65 |ers may |experime|
|00000220| 6e 74 0d 2a 20 20 77 69 | 74 68 20 65 6e 68 61 6e |nt.* wi|th enhan|
|00000230| 63 65 6d 65 6e 74 73 20 | 74 6f 20 50 4f 56 2d 52 |cements |to POV-R|
|00000240| 61 79 20 61 6e 64 20 74 | 6f 20 70 6f 72 74 20 74 |ay and t|o port t|
|00000250| 68 65 20 73 6f 66 74 77 | 61 72 65 20 74 6f 20 70 |he softw|are to p|
|00000260| 6c 61 74 66 6f 72 6d 73 | 20 6f 74 68 65 72 20 0d |latforms| other .|
|00000270| 2a 20 20 74 68 61 6e 20 | 74 68 6f 73 65 20 73 75 |* than |those su|
|00000280| 70 70 6f 72 74 65 64 20 | 62 79 20 74 68 65 20 50 |pported |by the P|
|00000290| 4f 56 2d 52 61 79 20 54 | 65 61 6d 2e 20 20 54 68 |OV-Ray T|eam. Th|
|000002a0| 65 72 65 20 61 72 65 20 | 73 74 72 69 63 74 20 72 |ere are |strict r|
|000002b0| 75 6c 65 73 20 75 6e 64 | 65 72 0d 2a 20 20 77 68 |ules und|er.* wh|
|000002c0| 69 63 68 20 79 6f 75 20 | 61 72 65 20 70 65 72 6d |ich you |are perm|
|000002d0| 69 74 74 65 64 20 74 6f | 20 75 73 65 20 74 68 69 |itted to| use thi|
|000002e0| 73 20 66 69 6c 65 2e 20 | 20 54 68 65 20 72 75 6c |s file. | The rul|
|000002f0| 65 73 20 61 72 65 20 69 | 6e 20 74 68 65 20 66 69 |es are i|n the fi|
|00000300| 6c 65 0d 2a 20 20 6e 61 | 6d 65 64 20 50 4f 56 4c |le.* na|med POVL|
|00000310| 45 47 41 4c 2e 44 4f 43 | 20 77 68 69 63 68 20 73 |EGAL.DOC| which s|
|00000320| 68 6f 75 6c 64 20 62 65 | 20 64 69 73 74 72 69 62 |hould be| distrib|
|00000330| 75 74 65 64 20 77 69 74 | 68 20 74 68 69 73 20 66 |uted wit|h this f|
|00000340| 69 6c 65 2e 20 49 66 20 | 0d 2a 20 20 50 4f 56 4c |ile. If |.* POVL|
|00000350| 45 47 41 4c 2e 44 4f 43 | 20 69 73 20 6e 6f 74 20 |EGAL.DOC| is not |
|00000360| 61 76 61 69 6c 61 62 6c | 65 20 6f 72 20 66 6f 72 |availabl|e or for|
|00000370| 20 6d 6f 72 65 20 69 6e | 66 6f 20 70 6c 65 61 73 | more in|fo pleas|
|00000380| 65 20 63 6f 6e 74 61 63 | 74 20 74 68 65 20 50 4f |e contac|t the PO|
|00000390| 56 2d 52 61 79 0d 2a 20 | 20 54 65 61 6d 20 43 6f |V-Ray.* | Team Co|
|000003a0| 6f 72 64 69 6e 61 74 6f | 72 20 62 79 20 6c 65 61 |ordinato|r by lea|
|000003b0| 76 69 6e 67 20 61 20 6d | 65 73 73 61 67 65 20 69 |ving a m|essage i|
|000003c0| 6e 20 43 6f 6d 70 75 53 | 65 72 76 65 27 73 20 47 |n CompuS|erve's G|
|000003d0| 72 61 70 68 69 63 73 20 | 44 65 76 65 6c 6f 70 65 |raphics |Develope|
|000003e0| 72 27 73 0d 2a 20 20 46 | 6f 72 75 6d 2e 20 20 54 |r's.* F|orum. T|
|000003f0| 68 65 20 6c 61 74 65 73 | 74 20 76 65 72 73 69 6f |he lates|t versio|
|00000400| 6e 20 6f 66 20 50 4f 56 | 2d 52 61 79 20 6d 61 79 |n of POV|-Ray may|
|00000410| 20 62 65 20 66 6f 75 6e | 64 20 74 68 65 72 65 20 | be foun|d there |
|00000420| 61 73 20 77 65 6c 6c 2e | 0d 2a 0d 2a 20 54 68 69 |as well.|.*.* Thi|
|00000430| 73 20 70 72 6f 67 72 61 | 6d 20 69 73 20 62 61 73 |s progra|m is bas|
|00000440| 65 64 20 6f 6e 20 74 68 | 65 20 70 6f 70 75 6c 61 |ed on th|e popula|
|00000450| 72 20 44 4b 42 20 72 61 | 79 74 72 61 63 65 72 20 |r DKB ra|ytracer |
|00000460| 76 65 72 73 69 6f 6e 20 | 32 2e 31 32 2e 0d 2a 20 |version |2.12..* |
|00000470| 44 4b 42 54 72 61 63 65 | 20 77 61 73 20 6f 72 69 |DKBTrace| was ori|
|00000480| 67 69 6e 61 6c 6c 79 20 | 77 72 69 74 74 65 6e 20 |ginally |written |
|00000490| 62 79 20 44 61 76 69 64 | 20 4b 2e 20 42 75 63 6b |by David| K. Buck|
|000004a0| 2e 0d 2a 20 44 4b 42 54 | 72 61 63 65 20 56 65 72 |..* DKBT|race Ver|
|000004b0| 20 32 2e 30 2d 32 2e 31 | 32 20 77 65 72 65 20 77 | 2.0-2.1|2 were w|
|000004c0| 72 69 74 74 65 6e 20 62 | 79 20 44 61 76 69 64 20 |ritten b|y David |
|000004d0| 4b 2e 20 42 75 63 6b 20 | 26 20 41 61 72 6f 6e 20 |K. Buck |& Aaron |
|000004e0| 41 2e 20 43 6f 6c 6c 69 | 6e 73 2e 0d 2a 0d 2a 2a |A. Colli|ns..*.**|
|000004f0| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000500| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000510| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000520| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00000530| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2f 0d 0d 23 69 |********|***/..#i|
|00000540| 6e 63 6c 75 64 65 20 22 | 66 72 61 6d 65 2e 68 22 |nclude "|frame.h"|
|00000550| 0d 23 69 6e 63 6c 75 64 | 65 20 22 76 65 63 74 6f |.#includ|e "vecto|
|00000560| 72 2e 68 22 0d 23 69 6e | 63 6c 75 64 65 20 22 70 |r.h".#in|clude "p|
|00000570| 6f 76 70 72 6f 74 6f 2e | 68 22 0d 0d 4d 45 54 48 |ovproto.|h"..METH|
|00000580| 4f 44 53 20 54 72 69 61 | 6e 67 6c 65 5f 4d 65 74 |ODS Tria|ngle_Met|
|00000590| 68 6f 64 73 20 3d 20 0d | 20 20 7b 0d 20 20 41 6c |hods = .| {. Al|
|000005a0| 6c 5f 54 72 69 61 6e 67 | 6c 65 5f 49 6e 74 65 72 |l_Triang|le_Inter|
|000005b0| 73 65 63 74 69 6f 6e 73 | 2c 0d 20 20 49 6e 73 69 |sections|,. Insi|
|000005c0| 64 65 5f 54 72 69 61 6e | 67 6c 65 2c 20 54 72 69 |de_Trian|gle, Tri|
|000005d0| 61 6e 67 6c 65 5f 4e 6f | 72 6d 61 6c 2c 0d 20 20 |angle_No|rmal,. |
|000005e0| 43 6f 70 79 5f 54 72 69 | 61 6e 67 6c 65 2c 0d 20 |Copy_Tri|angle,. |
|000005f0| 20 54 72 61 6e 73 6c 61 | 74 65 5f 54 72 69 61 6e | Transla|te_Trian|
|00000600| 67 6c 65 2c 20 52 6f 74 | 61 74 65 5f 54 72 69 61 |gle, Rot|ate_Tria|
|00000610| 6e 67 6c 65 2c 0d 20 20 | 53 63 61 6c 65 5f 54 72 |ngle,. |Scale_Tr|
|00000620| 69 61 6e 67 6c 65 2c 20 | 54 72 61 6e 73 66 6f 72 |iangle, |Transfor|
|00000630| 6d 5f 54 72 69 61 6e 67 | 6c 65 2c 20 49 6e 76 65 |m_Triang|le, Inve|
|00000640| 72 74 5f 54 72 69 61 6e | 67 6c 65 2c 20 44 65 73 |rt_Trian|gle, Des|
|00000650| 74 72 6f 79 5f 54 72 69 | 61 6e 67 6c 65 0d 20 20 |troy_Tri|angle. |
|00000660| 7d 3b 0d 0d 4d 45 54 48 | 4f 44 53 20 53 6d 6f 6f |};..METH|ODS Smoo|
|00000670| 74 68 5f 54 72 69 61 6e | 67 6c 65 5f 4d 65 74 68 |th_Trian|gle_Meth|
|00000680| 6f 64 73 20 3d 20 0d 20 | 20 7b 0d 20 20 41 6c 6c |ods = . | {. All|
|00000690| 5f 54 72 69 61 6e 67 6c | 65 5f 49 6e 74 65 72 73 |_Triangl|e_Inters|
|000006a0| 65 63 74 69 6f 6e 73 2c | 0d 20 20 49 6e 73 69 64 |ections,|. Insid|
|000006b0| 65 5f 54 72 69 61 6e 67 | 6c 65 2c 20 53 6d 6f 6f |e_Triang|le, Smoo|
|000006c0| 74 68 5f 54 72 69 61 6e | 67 6c 65 5f 4e 6f 72 6d |th_Trian|gle_Norm|
|000006d0| 61 6c 2c 0d 20 20 43 6f | 70 79 5f 53 6d 6f 6f 74 |al,. Co|py_Smoot|
|000006e0| 68 5f 54 72 69 61 6e 67 | 6c 65 2c 0d 20 20 54 72 |h_Triang|le,. Tr|
|000006f0| 61 6e 73 6c 61 74 65 5f | 53 6d 6f 6f 74 68 5f 54 |anslate_|Smooth_T|
|00000700| 72 69 61 6e 67 6c 65 2c | 20 52 6f 74 61 74 65 5f |riangle,| Rotate_|
|00000710| 53 6d 6f 6f 74 68 5f 54 | 72 69 61 6e 67 6c 65 2c |Smooth_T|riangle,|
|00000720| 0d 20 20 53 63 61 6c 65 | 5f 53 6d 6f 6f 74 68 5f |. Scale|_Smooth_|
|00000730| 54 72 69 61 6e 67 6c 65 | 2c 20 54 72 61 6e 73 66 |Triangle|, Transf|
|00000740| 6f 72 6d 5f 53 6d 6f 6f | 74 68 5f 54 72 69 61 6e |orm_Smoo|th_Trian|
|00000750| 67 6c 65 2c 20 0d 20 20 | 49 6e 76 65 72 74 5f 53 |gle, . |Invert_S|
|00000760| 6d 6f 6f 74 68 5f 54 72 | 69 61 6e 67 6c 65 2c 20 |mooth_Tr|iangle, |
|00000770| 44 65 73 74 72 6f 79 5f | 54 72 69 61 6e 67 6c 65 |Destroy_|Triangle|
|00000780| 0d 20 20 7d 3b 0d 0d 65 | 78 74 65 72 6e 20 52 41 |. };..e|xtern RA|
|00000790| 59 20 2a 43 4d 5f 52 61 | 79 3b 0d 65 78 74 65 72 |Y *CM_Ra|y;.exter|
|000007a0| 6e 20 6c 6f 6e 67 20 52 | 61 79 5f 54 72 69 61 6e |n long R|ay_Trian|
|000007b0| 67 6c 65 5f 54 65 73 74 | 73 2c 20 52 61 79 5f 54 |gle_Test|s, Ray_T|
|000007c0| 72 69 61 6e 67 6c 65 5f | 54 65 73 74 73 5f 53 75 |riangle_|Tests_Su|
|000007d0| 63 63 65 65 64 65 64 3b | 0d 0d 23 64 65 66 69 6e |cceeded;|..#defin|
|000007e0| 65 20 6d 61 78 33 28 78 | 2c 79 2c 7a 29 20 28 28 |e max3(x|,y,z) ((|
|000007f0| 78 3e 79 29 3f 28 28 78 | 3e 7a 29 3f 31 3a 33 29 |x>y)?((x|>z)?1:3)|
|00000800| 3a 28 28 79 3e 7a 29 3f | 32 3a 33 29 29 0d 0d 23 |:((y>z)?|2:3))..#|
|00000810| 64 65 66 69 6e 65 20 4d | 41 58 33 28 78 2c 79 2c |define M|AX3(x,y,|
|00000820| 7a 29 20 28 28 28 78 29 | 3e 28 79 29 29 3f 28 28 |z) (((x)|>(y))?((|
|00000830| 28 78 29 3e 28 7a 29 29 | 3f 28 78 29 3a 28 7a 29 |(x)>(z))|?(x):(z)|
|00000840| 29 3a 28 28 28 79 29 3e | 28 7a 29 29 3f 28 79 29 |):(((y)>|(z))?(y)|
|00000850| 3a 28 7a 29 29 29 0d 23 | 64 65 66 69 6e 65 20 4d |:(z))).#|define M|
|00000860| 49 4e 33 28 78 2c 79 2c | 7a 29 20 28 28 28 78 29 |IN3(x,y,|z) (((x)|
|00000870| 3c 28 79 29 29 3f 28 28 | 28 78 29 3c 28 7a 29 29 |<(y))?((|(x)<(z))|
|00000880| 3f 28 78 29 3a 28 7a 29 | 29 3a 28 28 28 79 29 3c |?(x):(z)|):(((y)<|
|00000890| 28 7a 29 29 3f 28 79 29 | 3a 28 7a 29 29 29 0d 0d |(z))?(y)|:(z)))..|
|000008a0| 76 6f 69 64 20 46 69 6e | 64 5f 54 72 69 61 6e 67 |void Fin|d_Triang|
|000008b0| 6c 65 5f 44 6f 6d 69 6e | 61 6e 74 5f 41 78 69 73 |le_Domin|ant_Axis|
|000008c0| 28 54 72 69 61 6e 67 6c | 65 29 0d 54 52 49 41 4e |(Triangl|e).TRIAN|
|000008d0| 47 4c 45 20 2a 54 72 69 | 61 6e 67 6c 65 3b 0d 20 |GLE *Tri|angle;. |
|000008e0| 20 7b 0d 20 20 44 42 4c | 20 78 2c 20 79 2c 20 7a | {. DBL| x, y, z|
|000008f0| 3b 0d 0d 20 20 78 20 3d | 20 66 61 62 73 28 54 72 |;.. x =| fabs(Tr|
|00000900| 69 61 6e 67 6c 65 2d 3e | 4e 6f 72 6d 61 6c 5f 56 |iangle->|Normal_V|
|00000910| 65 63 74 6f 72 2e 78 29 | 3b 0d 20 20 79 20 3d 20 |ector.x)|;. y = |
|00000920| 66 61 62 73 20 28 54 72 | 69 61 6e 67 6c 65 2d 3e |fabs (Tr|iangle->|
|00000930| 4e 6f 72 6d 61 6c 5f 56 | 65 63 74 6f 72 2e 79 29 |Normal_V|ector.y)|
|00000940| 3b 0d 20 20 7a 20 3d 20 | 66 61 62 73 20 28 54 72 |;. z = |fabs (Tr|
|00000950| 69 61 6e 67 6c 65 2d 3e | 4e 6f 72 6d 61 6c 5f 56 |iangle->|Normal_V|
|00000960| 65 63 74 6f 72 2e 7a 29 | 3b 0d 20 20 73 77 69 74 |ector.z)|;. swit|
|00000970| 63 68 20 28 6d 61 78 33 | 28 78 2c 20 79 2c 20 7a |ch (max3|(x, y, z|
|00000980| 29 29 20 0d 20 20 7b 0d | 20 20 63 61 73 65 20 31 |)) . {.| case 1|
|00000990| 3a 20 0d 20 20 20 20 54 | 72 69 61 6e 67 6c 65 2d |: . T|riangle-|
|000009a0| 3e 44 6f 6d 69 6e 61 6e | 74 5f 41 78 69 73 20 3d |>Dominan|t_Axis =|
|000009b0| 20 58 5f 41 58 49 53 3b | 0d 20 20 20 20 62 72 65 | X_AXIS;|. bre|
|000009c0| 61 6b 3b 0d 20 20 63 61 | 73 65 20 32 3a 20 0d 20 |ak;. ca|se 2: . |
|000009d0| 20 20 20 54 72 69 61 6e | 67 6c 65 2d 3e 44 6f 6d | Trian|gle->Dom|
|000009e0| 69 6e 61 6e 74 5f 41 78 | 69 73 20 3d 20 59 5f 41 |inant_Ax|is = Y_A|
|000009f0| 58 49 53 3b 0d 20 20 20 | 20 62 72 65 61 6b 3b 0d |XIS;. | break;.|
|00000a00| 20 20 63 61 73 65 20 33 | 3a 20 0d 20 20 20 20 54 | case 3|: . T|
|00000a10| 72 69 61 6e 67 6c 65 2d | 3e 44 6f 6d 69 6e 61 6e |riangle-|>Dominan|
|00000a20| 74 5f 41 78 69 73 20 3d | 20 5a 5f 41 58 49 53 3b |t_Axis =| Z_AXIS;|
|00000a30| 0d 20 20 20 20 62 72 65 | 61 6b 3b 0d 20 20 7d 0d |. bre|ak;. }.|
|00000a40| 20 20 7d 0d 0d 76 6f 69 | 64 20 43 6f 6d 70 75 74 | }..voi|d Comput|
|00000a50| 65 5f 53 6d 6f 6f 74 68 | 5f 54 72 69 61 6e 67 6c |e_Smooth|_Triangl|
|00000a60| 65 20 28 54 72 69 61 6e | 67 6c 65 29 0d 53 4d 4f |e (Trian|gle).SMO|
|00000a70| 4f 54 48 5f 54 52 49 41 | 4e 47 4c 45 20 2a 54 72 |OTH_TRIA|NGLE *Tr|
|00000a80| 69 61 6e 67 6c 65 3b 0d | 20 20 7b 0d 20 20 56 45 |iangle;.| {. VE|
|00000a90| 43 54 4f 52 20 50 33 4d | 69 6e 75 73 50 32 2c 20 |CTOR P3M|inusP2, |
|00000aa0| 56 54 65 6d 70 31 2c 20 | 56 54 65 6d 70 32 3b 0d |VTemp1, |VTemp2;.|
|00000ab0| 20 20 44 42 4c 20 78 2c | 20 79 2c 20 7a 2c 20 75 | DBL x,| y, z, u|
|00000ac0| 44 65 6e 6f 6d 69 6e 61 | 74 6f 72 2c 20 50 72 6f |Denomina|tor, Pro|
|00000ad0| 6a 3b 0d 0d 20 20 56 53 | 75 62 20 28 50 33 4d 69 |j;.. VS|ub (P3Mi|
|00000ae0| 6e 75 73 50 32 2c 20 54 | 72 69 61 6e 67 6c 65 2d |nusP2, T|riangle-|
|00000af0| 3e 50 33 2c 20 54 72 69 | 61 6e 67 6c 65 2d 3e 50 |>P3, Tri|angle->P|
|00000b00| 32 29 3b 0d 20 20 78 20 | 3d 20 66 61 62 73 20 28 |2);. x |= fabs (|
|00000b10| 50 33 4d 69 6e 75 73 50 | 32 2e 78 29 3b 0d 20 20 |P3MinusP|2.x);. |
|00000b20| 79 20 3d 20 66 61 62 73 | 20 28 50 33 4d 69 6e 75 |y = fabs| (P3Minu|
|00000b30| 73 50 32 2e 79 29 3b 0d | 20 20 7a 20 3d 20 66 61 |sP2.y);.| z = fa|
|00000b40| 62 73 20 28 50 33 4d 69 | 6e 75 73 50 32 2e 7a 29 |bs (P3Mi|nusP2.z)|
|00000b50| 3b 0d 0d 20 20 73 77 69 | 74 63 68 20 28 6d 61 78 |;.. swi|tch (max|
|00000b60| 33 20 28 78 2c 20 79 2c | 20 7a 29 29 20 0d 20 20 |3 (x, y,| z)) . |
|00000b70| 7b 0d 20 20 63 61 73 65 | 20 31 3a 20 20 0d 20 20 |{. case| 1: . |
|00000b80| 20 20 54 72 69 61 6e 67 | 6c 65 2d 3e 76 41 78 69 | Triang|le->vAxi|
|00000b90| 73 20 3d 20 58 5f 41 58 | 49 53 3b 0d 20 20 20 20 |s = X_AX|IS;. |
|00000ba0| 54 72 69 61 6e 67 6c 65 | 2d 3e 42 61 73 65 44 65 |Triangle|->BaseDe|
|00000bb0| 6c 74 61 20 3d 20 50 33 | 4d 69 6e 75 73 50 32 2e |lta = P3|MinusP2.|
|00000bc0| 78 3b 0d 20 20 20 20 62 | 72 65 61 6b 3b 0d 0d 20 |x;. b|reak;.. |
|00000bd0| 20 63 61 73 65 20 32 3a | 20 20 0d 20 20 20 20 54 | case 2:| . T|
|00000be0| 72 69 61 6e 67 6c 65 2d | 3e 76 41 78 69 73 20 3d |riangle-|>vAxis =|
|00000bf0| 20 59 5f 41 58 49 53 3b | 0d 20 20 20 20 54 72 69 | Y_AXIS;|. Tri|
|00000c00| 61 6e 67 6c 65 2d 3e 42 | 61 73 65 44 65 6c 74 61 |angle->B|aseDelta|
|00000c10| 20 3d 20 50 33 4d 69 6e | 75 73 50 32 2e 79 3b 0d | = P3Min|usP2.y;.|
|00000c20| 20 20 20 20 62 72 65 61 | 6b 3b 0d 0d 20 20 63 61 | brea|k;.. ca|
|00000c30| 73 65 20 33 3a 20 20 0d | 20 20 20 20 54 72 69 61 |se 3: .| Tria|
|00000c40| 6e 67 6c 65 2d 3e 76 41 | 78 69 73 20 3d 20 5a 5f |ngle->vA|xis = Z_|
|00000c50| 41 58 49 53 3b 0d 20 20 | 20 20 54 72 69 61 6e 67 |AXIS;. | Triang|
|00000c60| 6c 65 2d 3e 42 61 73 65 | 44 65 6c 74 61 20 3d 20 |le->Base|Delta = |
|00000c70| 50 33 4d 69 6e 75 73 50 | 32 2e 7a 3b 0d 20 20 20 |P3MinusP|2.z;. |
|00000c80| 20 62 72 65 61 6b 3b 0d | 20 20 7d 20 20 20 0d 0d | break;.| } ..|
|00000c90| 20 20 56 53 75 62 20 28 | 56 54 65 6d 70 31 2c 20 | VSub (|VTemp1, |
|00000ca0| 54 72 69 61 6e 67 6c 65 | 2d 3e 50 32 2c 20 54 72 |Triangle|->P2, Tr|
|00000cb0| 69 61 6e 67 6c 65 2d 3e | 50 33 29 3b 0d 20 20 56 |iangle->|P3);. V|
|00000cc0| 4e 6f 72 6d 61 6c 69 7a | 65 20 28 56 54 65 6d 70 |Normaliz|e (VTemp|
|00000cd0| 31 2c 20 56 54 65 6d 70 | 31 29 3b 0d 20 20 56 53 |1, VTemp|1);. VS|
|00000ce0| 75 62 20 28 56 54 65 6d | 70 32 2c 20 54 72 69 61 |ub (VTem|p2, Tria|
|00000cf0| 6e 67 6c 65 2d 3e 50 31 | 2c 20 54 72 69 61 6e 67 |ngle->P1|, Triang|
|00000d00| 6c 65 2d 3e 50 33 29 3b | 0d 20 20 56 44 6f 74 20 |le->P3);|. VDot |
|00000d10| 28 50 72 6f 6a 2c 20 56 | 54 65 6d 70 32 2c 20 56 |(Proj, V|Temp2, V|
|00000d20| 54 65 6d 70 31 29 3b 0d | 20 20 56 53 63 61 6c 65 |Temp1);.| VScale|
|00000d30| 45 71 20 28 56 54 65 6d | 70 31 2c 20 50 72 6f 6a |Eq (VTem|p1, Proj|
|00000d40| 29 3b 0d 20 20 56 53 75 | 62 20 28 54 72 69 61 6e |);. VSu|b (Trian|
|00000d50| 67 6c 65 2d 3e 50 65 72 | 70 2c 20 56 54 65 6d 70 |gle->Per|p, VTemp|
|00000d60| 31 2c 20 56 54 65 6d 70 | 32 29 3b 0d 20 20 56 4e |1, VTemp|2);. VN|
|00000d70| 6f 72 6d 61 6c 69 7a 65 | 20 28 54 72 69 61 6e 67 |ormalize| (Triang|
|00000d80| 6c 65 2d 3e 50 65 72 70 | 2c 20 54 72 69 61 6e 67 |le->Perp|, Triang|
|00000d90| 6c 65 2d 3e 50 65 72 70 | 29 3b 0d 20 20 56 44 6f |le->Perp|);. VDo|
|00000da0| 74 20 28 75 44 65 6e 6f | 6d 69 6e 61 74 6f 72 2c |t (uDeno|minator,|
|00000db0| 20 56 54 65 6d 70 32 2c | 20 54 72 69 61 6e 67 6c | VTemp2,| Triangl|
|00000dc0| 65 2d 3e 50 65 72 70 29 | 3b 0d 20 20 56 49 6e 76 |e->Perp)|;. VInv|
|00000dd0| 65 72 73 65 53 63 61 6c | 65 45 71 20 28 54 72 69 |erseScal|eEq (Tri|
|00000de0| 61 6e 67 6c 65 2d 3e 50 | 65 72 70 2c 20 2d 75 44 |angle->P|erp, -uD|
|00000df0| 65 6e 6f 6d 69 6e 61 74 | 6f 72 29 3b 0d 20 20 7d |enominat|or);. }|
|00000e00| 0d 0d 69 6e 74 20 43 6f | 6d 70 75 74 65 5f 54 72 |..int Co|mpute_Tr|
|00000e10| 69 61 6e 67 6c 65 20 28 | 54 72 69 61 6e 67 6c 65 |iangle (|Triangle|
|00000e20| 2c 53 6d 6f 6f 74 68 29 | 0d 54 52 49 41 4e 47 4c |,Smooth)|.TRIANGL|
|00000e30| 45 20 2a 54 72 69 61 6e | 67 6c 65 3b 0d 69 6e 74 |E *Trian|gle;.int|
|00000e40| 20 53 6d 6f 6f 74 68 3b | 0d 20 20 7b 0d 20 20 56 | Smooth;|. {. V|
|00000e50| 45 43 54 4f 52 20 56 31 | 2c 20 56 32 2c 20 54 65 |ECTOR V1|, V2, Te|
|00000e60| 6d 70 3b 0d 20 20 44 42 | 4c 20 4c 65 6e 67 74 68 |mp;. DB|L Length|
|00000e70| 2c 20 54 31 2c 20 54 32 | 2c 20 54 33 3b 0d 0d 20 |, T1, T2|, T3;.. |
|00000e80| 20 56 53 75 62 20 28 56 | 31 2c 20 54 72 69 61 6e | VSub (V|1, Trian|
|00000e90| 67 6c 65 2d 3e 50 31 2c | 20 54 72 69 61 6e 67 6c |gle->P1,| Triangl|
|00000ea0| 65 2d 3e 50 32 29 3b 0d | 20 20 56 53 75 62 20 28 |e->P2);.| VSub (|
|00000eb0| 56 32 2c 20 54 72 69 61 | 6e 67 6c 65 2d 3e 50 33 |V2, Tria|ngle->P3|
|00000ec0| 2c 20 54 72 69 61 6e 67 | 6c 65 2d 3e 50 32 29 3b |, Triang|le->P2);|
|00000ed0| 0d 20 20 56 43 72 6f 73 | 73 20 28 54 72 69 61 6e |. VCros|s (Trian|
|00000ee0| 67 6c 65 2d 3e 4e 6f 72 | 6d 61 6c 5f 56 65 63 74 |gle->Nor|mal_Vect|
|00000ef0| 6f 72 2c 20 56 31 2c 20 | 56 32 29 3b 0d 20 20 56 |or, V1, |V2);. V|
|00000f00| 4c 65 6e 67 74 68 20 28 | 4c 65 6e 67 74 68 2c 20 |Length (|Length, |
|00000f10| 54 72 69 61 6e 67 6c 65 | 2d 3e 4e 6f 72 6d 61 6c |Triangle|->Normal|
|00000f20| 5f 56 65 63 74 6f 72 29 | 3b 0d 20 20 2f 2a 20 53 |_Vector)|;. /* S|
|00000f30| 65 74 20 75 70 20 61 20 | 66 6c 61 67 20 73 6f 20 |et up a |flag so |
|00000f40| 77 65 20 63 61 6e 20 69 | 67 6e 6f 72 65 20 64 65 |we can i|gnore de|
|00000f50| 67 65 6e 65 72 61 74 65 | 20 74 72 69 61 6e 67 6c |generate| triangl|
|00000f60| 65 73 20 2a 2f 0d 20 20 | 69 66 20 28 4c 65 6e 67 |es */. |if (Leng|
|00000f70| 74 68 20 3c 20 31 2e 30 | 65 2d 39 29 0d 20 20 20 |th < 1.0|e-9). |
|00000f80| 20 7b 0d 20 20 20 20 54 | 72 69 61 6e 67 6c 65 2d | {. T|riangle-|
|00000f90| 3e 44 65 67 65 6e 65 72 | 61 74 65 5f 46 6c 61 67 |>Degener|ate_Flag|
|00000fa0| 20 3d 20 54 52 55 45 3b | 0d 20 20 20 20 72 65 74 | = TRUE;|. ret|
|00000fb0| 75 72 6e 20 28 30 29 3b | 0d 20 20 20 20 7d 0d 0d |urn (0);|. }..|
|00000fc0| 20 20 2f 2a 20 4e 6f 72 | 6d 61 6c 69 7a 65 20 74 | /* Nor|malize t|
|00000fd0| 68 65 20 6e 6f 72 6d 61 | 6c 20 76 65 63 74 6f 72 |he norma|l vector|
|00000fe0| 2e 20 2a 2f 0d 20 20 56 | 49 6e 76 65 72 73 65 53 |. */. V|InverseS|
|00000ff0| 63 61 6c 65 45 71 20 28 | 54 72 69 61 6e 67 6c 65 |caleEq (|Triangle|
|00001000| 2d 3e 4e 6f 72 6d 61 6c | 5f 56 65 63 74 6f 72 2c |->Normal|_Vector,|
|00001010| 20 4c 65 6e 67 74 68 29 | 3b 0d 0d 20 20 56 44 6f | Length)|;.. VDo|
|00001020| 74 20 28 54 72 69 61 6e | 67 6c 65 2d 3e 44 69 73 |t (Trian|gle->Dis|
|00001030| 74 61 6e 63 65 2c 20 54 | 72 69 61 6e 67 6c 65 2d |tance, T|riangle-|
|00001040| 3e 4e 6f 72 6d 61 6c 5f | 56 65 63 74 6f 72 2c 20 |>Normal_|Vector, |
|00001050| 54 72 69 61 6e 67 6c 65 | 2d 3e 50 31 29 3b 0d 20 |Triangle|->P1);. |
|00001060| 20 54 72 69 61 6e 67 6c | 65 2d 3e 44 69 73 74 61 | Triangl|e->Dista|
|00001070| 6e 63 65 20 2a 3d 20 2d | 31 2e 30 3b 0d 20 20 46 |nce *= -|1.0;. F|
|00001080| 69 6e 64 5f 54 72 69 61 | 6e 67 6c 65 5f 44 6f 6d |ind_Tria|ngle_Dom|
|00001090| 69 6e 61 6e 74 5f 41 78 | 69 73 28 54 72 69 61 6e |inant_Ax|is(Trian|
|000010a0| 67 6c 65 29 3b 0d 0d 20 | 20 73 77 69 74 63 68 20 |gle);.. | switch |
|000010b0| 28 54 72 69 61 6e 67 6c | 65 2d 3e 44 6f 6d 69 6e |(Triangl|e->Domin|
|000010c0| 61 6e 74 5f 41 78 69 73 | 29 20 0d 20 20 7b 0d 20 |ant_Axis|) . {. |
|000010d0| 20 63 61 73 65 20 58 5f | 41 58 49 53 3a 0d 20 20 | case X_|AXIS:. |
|000010e0| 20 20 69 66 20 28 28 54 | 72 69 61 6e 67 6c 65 2d | if ((T|riangle-|
|000010f0| 3e 50 32 2e 79 20 2d 20 | 54 72 69 61 6e 67 6c 65 |>P2.y - |Triangle|
|00001100| 2d 3e 50 33 2e 79 29 2a | 28 54 72 69 61 6e 67 6c |->P3.y)*|(Triangl|
|00001110| 65 2d 3e 50 32 2e 7a 20 | 2d 20 54 72 69 61 6e 67 |e->P2.z |- Triang|
|00001120| 6c 65 2d 3e 50 31 2e 7a | 29 20 3c 0d 20 20 20 20 |le->P1.z|) <. |
|00001130| 20 20 28 54 72 69 61 6e | 67 6c 65 2d 3e 50 32 2e | (Trian|gle->P2.|
|00001140| 7a 20 2d 20 54 72 69 61 | 6e 67 6c 65 2d 3e 50 33 |z - Tria|ngle->P3|
|00001150| 2e 7a 29 2a 28 54 72 69 | 61 6e 67 6c 65 2d 3e 50 |.z)*(Tri|angle->P|
|00001160| 32 2e 79 20 2d 20 54 72 | 69 61 6e 67 6c 65 2d 3e |2.y - Tr|iangle->|
|00001170| 50 31 2e 79 29 29 20 0d | 20 20 20 20 20 20 7b 0d |P1.y)) .| {.|
|00001180| 20 20 20 20 20 20 54 65 | 6d 70 20 3d 20 54 72 69 | Te|mp = Tri|
|00001190| 61 6e 67 6c 65 2d 3e 50 | 32 3b 0d 20 20 20 20 20 |angle->P|2;. |
|000011a0| 20 54 72 69 61 6e 67 6c | 65 2d 3e 50 32 20 3d 20 | Triangl|e->P2 = |
|000011b0| 54 72 69 61 6e 67 6c 65 | 2d 3e 50 31 3b 0d 20 20 |Triangle|->P1;. |
|000011c0| 20 20 20 20 54 72 69 61 | 6e 67 6c 65 2d 3e 50 31 | Tria|ngle->P1|
|000011d0| 20 3d 20 54 65 6d 70 3b | 0d 20 20 20 20 20 20 69 | = Temp;|. i|
|000011e0| 66 20 28 53 6d 6f 6f 74 | 68 29 20 0d 20 20 20 20 |f (Smoot|h) . |
|000011f0| 20 20 20 20 7b 0d 20 20 | 20 20 20 20 20 20 54 65 | {. | Te|
|00001200| 6d 70 20 3d 20 28 28 53 | 4d 4f 4f 54 48 5f 54 52 |mp = ((S|MOOTH_TR|
|00001210| 49 41 4e 47 4c 45 20 2a | 29 20 54 72 69 61 6e 67 |IANGLE *|) Triang|
|00001220| 6c 65 29 2d 3e 4e 32 3b | 0d 20 20 20 20 20 20 20 |le)->N2;|. |
|00001230| 20 28 28 53 4d 4f 4f 54 | 48 5f 54 52 49 41 4e 47 | ((SMOOT|H_TRIANG|
|00001240| 4c 45 20 2a 29 20 54 72 | 69 61 6e 67 6c 65 29 2d |LE *) Tr|iangle)-|
|00001250| 3e 4e 32 20 3d 20 28 28 | 53 4d 4f 4f 54 48 5f 54 |>N2 = ((|SMOOTH_T|
|00001260| 52 49 41 4e 47 4c 45 20 | 2a 29 20 54 72 69 61 6e |RIANGLE |*) Trian|
|00001270| 67 6c 65 29 2d 3e 4e 31 | 3b 0d 20 20 20 20 20 20 |gle)->N1|;. |
|00001280| 20 20 28 28 53 4d 4f 4f | 54 48 5f 54 52 49 41 4e | ((SMOO|TH_TRIAN|
|00001290| 47 4c 45 20 2a 29 20 54 | 72 69 61 6e 67 6c 65 29 |GLE *) T|riangle)|
|000012a0| 2d 3e 4e 31 20 3d 20 54 | 65 6d 70 3b 0d 20 20 20 |->N1 = T|emp;. |
|000012b0| 20 20 20 20 20 7d 0d 20 | 20 20 20 20 20 7d 0d 20 | }. | }. |
|000012c0| 20 20 20 62 72 65 61 6b | 3b 0d 0d 20 20 63 61 73 | break|;.. cas|
|000012d0| 65 20 59 5f 41 58 49 53 | 3a 0d 20 20 20 20 69 66 |e Y_AXIS|:. if|
|000012e0| 20 28 28 54 72 69 61 6e | 67 6c 65 2d 3e 50 32 2e | ((Trian|gle->P2.|
|000012f0| 78 20 2d 20 54 72 69 61 | 6e 67 6c 65 2d 3e 50 33 |x - Tria|ngle->P3|
|00001300| 2e 78 29 2a 28 54 72 69 | 61 6e 67 6c 65 2d 3e 50 |.x)*(Tri|angle->P|
|00001310| 32 2e 7a 20 2d 20 54 72 | 69 61 6e 67 6c 65 2d 3e |2.z - Tr|iangle->|
|00001320| 50 31 2e 7a 29 20 3c 0d | 20 20 20 20 20 20 28 54 |P1.z) <.| (T|
|00001330| 72 69 61 6e 67 6c 65 2d | 3e 50 32 2e 7a 20 2d 20 |riangle-|>P2.z - |
|00001340| 54 72 69 61 6e 67 6c 65 | 2d 3e 50 33 2e 7a 29 2a |Triangle|->P3.z)*|
|00001350| 28 54 72 69 61 6e 67 6c | 65 2d 3e 50 32 2e 78 20 |(Triangl|e->P2.x |
|00001360| 2d 20 54 72 69 61 6e 67 | 6c 65 2d 3e 50 31 2e 78 |- Triang|le->P1.x|
|00001370| 29 29 20 0d 20 20 20 20 | 20 20 7b 0d 20 20 20 20 |)) . | {. |
|00001380| 20 20 54 65 6d 70 20 3d | 20 54 72 69 61 6e 67 6c | Temp =| Triangl|
|00001390| 65 2d 3e 50 32 3b 0d 20 | 20 20 20 20 20 54 72 69 |e->P2;. | Tri|
|000013a0| 61 6e 67 6c 65 2d 3e 50 | 32 20 3d 20 54 72 69 61 |angle->P|2 = Tria|
|000013b0| 6e 67 6c 65 2d 3e 50 31 | 3b 0d 20 20 20 20 20 20 |ngle->P1|;. |
|000013c0| 54 72 69 61 6e 67 6c 65 | 2d 3e 50 31 20 3d 20 54 |Triangle|->P1 = T|
|000013d0| 65 6d 70 3b 0d 20 20 20 | 20 20 20 69 66 20 28 53 |emp;. | if (S|
|000013e0| 6d 6f 6f 74 68 29 20 0d | 20 20 20 20 20 20 20 20 |mooth) .| |
|000013f0| 7b 0d 20 20 20 20 20 20 | 20 20 54 65 6d 70 20 3d |{. | Temp =|
|00001400| 20 28 28 53 4d 4f 4f 54 | 48 5f 54 52 49 41 4e 47 | ((SMOOT|H_TRIANG|
|00001410| 4c 45 20 2a 29 20 54 72 | 69 61 6e 67 6c 65 29 2d |LE *) Tr|iangle)-|
|00001420| 3e 4e 32 3b 0d 20 20 20 | 20 20 20 20 20 28 28 53 |>N2;. | ((S|
|00001430| 4d 4f 4f 54 48 5f 54 52 | 49 41 4e 47 4c 45 20 2a |MOOTH_TR|IANGLE *|
|00001440| 29 20 54 72 69 61 6e 67 | 6c 65 29 2d 3e 4e 32 20 |) Triang|le)->N2 |
|00001450| 3d 20 28 28 53 4d 4f 4f | 54 48 5f 54 52 49 41 4e |= ((SMOO|TH_TRIAN|
|00001460| 47 4c 45 20 2a 29 20 54 | 72 69 61 6e 67 6c 65 29 |GLE *) T|riangle)|
|00001470| 2d 3e 4e 31 3b 0d 20 20 | 20 20 20 20 20 20 28 28 |->N1;. | ((|
|00001480| 53 4d 4f 4f 54 48 5f 54 | 52 49 41 4e 47 4c 45 20 |SMOOTH_T|RIANGLE |
|00001490| 2a 29 20 54 72 69 61 6e | 67 6c 65 29 2d 3e 4e 31 |*) Trian|gle)->N1|
|000014a0| 20 3d 20 54 65 6d 70 3b | 0d 20 20 20 20 20 20 20 | = Temp;|. |
|000014b0| 20 7d 0d 20 20 20 20 20 | 20 7d 0d 20 20 20 20 62 | }. | }. b|
|000014c0| 72 65 61 6b 3b 0d 0d 20 | 20 63 61 73 65 20 5a 5f |reak;.. | case Z_|
|000014d0| 41 58 49 53 3a 0d 20 20 | 20 20 69 66 20 28 28 54 |AXIS:. | if ((T|
|000014e0| 72 69 61 6e 67 6c 65 2d | 3e 50 32 2e 78 20 2d 20 |riangle-|>P2.x - |
|000014f0| 54 72 69 61 6e 67 6c 65 | 2d 3e 50 33 2e 78 29 2a |Triangle|->P3.x)*|
|00001500| 28 54 72 69 61 6e 67 6c | 65 2d 3e 50 32 2e 79 20 |(Triangl|e->P2.y |
|00001510| 2d 20 54 72 69 61 6e 67 | 6c 65 2d 3e 50 31 2e 79 |- Triang|le->P1.y|
|00001520| 29 20 3c 0d 20 20 20 20 | 20 20 28 54 72 69 61 6e |) <. | (Trian|
|00001530| 67 6c 65 2d 3e 50 32 2e | 79 20 2d 20 54 72 69 61 |gle->P2.|y - Tria|
|00001540| 6e 67 6c 65 2d 3e 50 33 | 2e 79 29 2a 28 54 72 69 |ngle->P3|.y)*(Tri|
|00001550| 61 6e 67 6c 65 2d 3e 50 | 32 2e 78 20 2d 20 54 72 |angle->P|2.x - Tr|
|00001560| 69 61 6e 67 6c 65 2d 3e | 50 31 2e 78 29 29 20 0d |iangle->|P1.x)) .|
|00001570| 20 20 20 20 20 20 7b 0d | 20 20 20 20 20 20 54 65 | {.| Te|
|00001580| 6d 70 20 3d 20 54 72 69 | 61 6e 67 6c 65 2d 3e 50 |mp = Tri|angle->P|
|00001590| 32 3b 0d 20 20 20 20 20 | 20 54 72 69 61 6e 67 6c |2;. | Triangl|
|000015a0| 65 2d 3e 50 32 20 3d 20 | 54 72 69 61 6e 67 6c 65 |e->P2 = |Triangle|
|000015b0| 2d 3e 50 31 3b 0d 20 20 | 20 20 20 20 54 72 69 61 |->P1;. | Tria|
|000015c0| 6e 67 6c 65 2d 3e 50 31 | 20 3d 20 54 65 6d 70 3b |ngle->P1| = Temp;|
|000015d0| 0d 20 20 20 20 20 20 69 | 66 20 28 53 6d 6f 6f 74 |. i|f (Smoot|
|000015e0| 68 29 20 0d 20 20 20 20 | 20 20 20 20 7b 0d 20 20 |h) . | {. |
|000015f0| 20 20 20 20 20 20 54 65 | 6d 70 20 3d 20 28 28 53 | Te|mp = ((S|
|00001600| 4d 4f 4f 54 48 5f 54 52 | 49 41 4e 47 4c 45 20 2a |MOOTH_TR|IANGLE *|
|00001610| 29 20 54 72 69 61 6e 67 | 6c 65 29 2d 3e 4e 32 3b |) Triang|le)->N2;|
|00001620| 0d 20 20 20 20 20 20 20 | 20 28 28 53 4d 4f 4f 54 |. | ((SMOOT|
|00001630| 48 5f 54 52 49 41 4e 47 | 4c 45 20 2a 29 20 54 72 |H_TRIANG|LE *) Tr|
|00001640| 69 61 6e 67 6c 65 29 2d | 3e 4e 32 20 3d 20 28 28 |iangle)-|>N2 = ((|
|00001650| 53 4d 4f 4f 54 48 5f 54 | 52 49 41 4e 47 4c 45 20 |SMOOTH_T|RIANGLE |
|00001660| 2a 29 20 54 72 69 61 6e | 67 6c 65 29 2d 3e 4e 31 |*) Trian|gle)->N1|
|00001670| 3b 0d 20 20 20 20 20 20 | 20 20 28 28 53 4d 4f 4f |;. | ((SMOO|
|00001680| 54 48 5f 54 52 49 41 4e | 47 4c 45 20 2a 29 20 54 |TH_TRIAN|GLE *) T|
|00001690| 72 69 61 6e 67 6c 65 29 | 2d 3e 4e 31 20 3d 20 54 |riangle)|->N1 = T|
|000016a0| 65 6d 70 3b 0d 20 20 20 | 20 20 20 20 20 7d 0d 20 |emp;. | }. |
|000016b0| 20 20 20 20 20 7d 0d 20 | 20 20 20 62 72 65 61 6b | }. | break|
|000016c0| 3b 0d 20 20 7d 0d 0d 20 | 20 69 66 20 28 53 6d 6f |;. }.. | if (Smo|
|000016d0| 6f 74 68 29 0d 20 20 20 | 20 43 6f 6d 70 75 74 65 |oth). | Compute|
|000016e0| 5f 53 6d 6f 6f 74 68 5f | 54 72 69 61 6e 67 6c 65 |_Smooth_|Triangle|
|000016f0| 28 28 53 4d 4f 4f 54 48 | 5f 54 52 49 41 4e 47 4c |((SMOOTH|_TRIANGL|
|00001700| 45 20 2a 29 20 54 72 69 | 61 6e 67 6c 65 29 3b 0d |E *) Tri|angle);.|
|00001710| 0d 20 20 2f 2a 20 42 75 | 69 6c 64 20 74 68 65 20 |. /* Bu|ild the |
|00001720| 62 6f 75 6e 64 69 6e 67 | 20 69 6e 66 6f 72 6d 61 |bounding| informa|
|00001730| 74 69 6f 6e 20 66 72 6f | 6d 20 74 68 65 20 76 65 |tion fro|m the ve|
|00001740| 72 74 69 63 65 73 20 2a | 2f 0d 20 20 2f 2a 20 55 |rtices *|/. /* U|
|00001750| 73 65 20 74 65 6d 70 73 | 20 73 6f 20 6d 61 63 72 |se temps| so macr|
|00001760| 6f 20 6e 6f 74 20 74 6f | 6f 20 62 69 67 2e 20 2a |o not to|o big. *|
|00001770| 2f 0d 20 20 54 31 20 3d | 20 4d 49 4e 33 28 54 72 |/. T1 =| MIN3(Tr|
|00001780| 69 61 6e 67 6c 65 2d 3e | 50 31 2e 78 2c 20 54 72 |iangle->|P1.x, Tr|
|00001790| 69 61 6e 67 6c 65 2d 3e | 50 32 2e 78 2c 20 54 72 |iangle->|P2.x, Tr|
|000017a0| 69 61 6e 67 6c 65 2d 3e | 50 33 2e 78 29 3b 0d 20 |iangle->|P3.x);. |
|000017b0| 20 54 32 20 3d 20 4d 49 | 4e 33 28 54 72 69 61 6e | T2 = MI|N3(Trian|
|000017c0| 67 6c 65 2d 3e 50 31 2e | 79 2c 20 54 72 69 61 6e |gle->P1.|y, Trian|
|000017d0| 67 6c 65 2d 3e 50 32 2e | 79 2c 20 54 72 69 61 6e |gle->P2.|y, Trian|
|000017e0| 67 6c 65 2d 3e 50 33 2e | 79 29 3b 0d 20 20 54 33 |gle->P3.|y);. T3|
|000017f0| 20 3d 20 4d 49 4e 33 28 | 54 72 69 61 6e 67 6c 65 | = MIN3(|Triangle|
|00001800| 2d 3e 50 31 2e 7a 2c 20 | 54 72 69 61 6e 67 6c 65 |->P1.z, |Triangle|
|00001810| 2d 3e 50 32 2e 7a 2c 20 | 54 72 69 61 6e 67 6c 65 |->P2.z, |Triangle|
|00001820| 2d 3e 50 33 2e 7a 29 3b | 0d 20 20 4d 61 6b 65 5f |->P3.z);|. Make_|
|00001830| 56 65 63 74 6f 72 28 26 | 54 72 69 61 6e 67 6c 65 |Vector(&|Triangle|
|00001840| 2d 3e 42 6f 75 6e 64 73 | 2e 4c 6f 77 65 72 5f 4c |->Bounds|.Lower_L|
|00001850| 65 66 74 2c 54 31 2c 54 | 32 2c 54 33 29 3b 0d 0d |eft,T1,T|2,T3);..|
|00001860| 20 20 54 31 20 3d 20 4d | 41 58 33 28 54 72 69 61 | T1 = M|AX3(Tria|
|00001870| 6e 67 6c 65 2d 3e 50 31 | 2e 78 2c 20 54 72 69 61 |ngle->P1|.x, Tria|
|00001880| 6e 67 6c 65 2d 3e 50 32 | 2e 78 2c 20 54 72 69 61 |ngle->P2|.x, Tria|
|00001890| 6e 67 6c 65 2d 3e 50 33 | 2e 78 29 3b 0d 20 20 54 |ngle->P3|.x);. T|
|000018a0| 32 20 3d 20 4d 41 58 33 | 28 54 72 69 61 6e 67 6c |2 = MAX3|(Triangl|
|000018b0| 65 2d 3e 50 31 2e 79 2c | 20 54 72 69 61 6e 67 6c |e->P1.y,| Triangl|
|000018c0| 65 2d 3e 50 32 2e 79 2c | 20 54 72 69 61 6e 67 6c |e->P2.y,| Triangl|
|000018d0| 65 2d 3e 50 33 2e 79 29 | 3b 0d 20 20 54 33 20 3d |e->P3.y)|;. T3 =|
|000018e0| 20 4d 41 58 33 28 54 72 | 69 61 6e 67 6c 65 2d 3e | MAX3(Tr|iangle->|
|000018f0| 50 31 2e 7a 2c 20 54 72 | 69 61 6e 67 6c 65 2d 3e |P1.z, Tr|iangle->|
|00001900| 50 32 2e 7a 2c 20 54 72 | 69 61 6e 67 6c 65 2d 3e |P2.z, Tr|iangle->|
|00001910| 50 33 2e 7a 29 3b 0d 20 | 20 4d 61 6b 65 5f 56 65 |P3.z);. | Make_Ve|
|00001920| 63 74 6f 72 28 26 54 72 | 69 61 6e 67 6c 65 2d 3e |ctor(&Tr|iangle->|
|00001930| 42 6f 75 6e 64 73 2e 4c | 65 6e 67 74 68 73 2c 54 |Bounds.L|engths,T|
|00001940| 31 2c 54 32 2c 54 33 29 | 3b 0d 0d 20 20 56 53 75 |1,T2,T3)|;.. VSu|
|00001950| 62 28 54 72 69 61 6e 67 | 6c 65 2d 3e 42 6f 75 6e |b(Triang|le->Boun|
|00001960| 64 73 2e 4c 65 6e 67 74 | 68 73 2c 20 54 72 69 61 |ds.Lengt|hs, Tria|
|00001970| 6e 67 6c 65 2d 3e 42 6f | 75 6e 64 73 2e 4c 65 6e |ngle->Bo|unds.Len|
|00001980| 67 74 68 73 2c 0d 20 20 | 20 20 54 72 69 61 6e 67 |gths,. | Triang|
|00001990| 6c 65 2d 3e 42 6f 75 6e | 64 73 2e 4c 6f 77 65 72 |le->Boun|ds.Lower|
|000019a0| 5f 4c 65 66 74 29 3b 0d | 20 20 54 72 69 61 6e 67 |_Left);.| Triang|
|000019b0| 6c 65 2d 3e 42 6f 75 6e | 64 73 2e 4c 65 6e 67 74 |le->Boun|ds.Lengt|
|000019c0| 68 73 2e 78 20 2b 3d 20 | 45 50 53 49 4c 4f 4e 3b |hs.x += |EPSILON;|
|000019d0| 0d 20 20 54 72 69 61 6e | 67 6c 65 2d 3e 42 6f 75 |. Trian|gle->Bou|
|000019e0| 6e 64 73 2e 4c 65 6e 67 | 74 68 73 2e 79 20 2b 3d |nds.Leng|ths.y +=|
|000019f0| 20 45 50 53 49 4c 4f 4e | 3b 0d 20 20 54 72 69 61 | EPSILON|;. Tria|
|00001a00| 6e 67 6c 65 2d 3e 42 6f | 75 6e 64 73 2e 4c 65 6e |ngle->Bo|unds.Len|
|00001a10| 67 74 68 73 2e 7a 20 2b | 3d 20 45 50 53 49 4c 4f |gths.z +|= EPSILO|
|00001a20| 4e 3b 0d 20 20 72 65 74 | 75 72 6e 20 28 31 29 3b |N;. ret|urn (1);|
|00001a30| 0d 20 20 7d 0d 0d 69 6e | 74 20 41 6c 6c 5f 54 72 |. }..in|t All_Tr|
|00001a40| 69 61 6e 67 6c 65 5f 49 | 6e 74 65 72 73 65 63 74 |iangle_I|ntersect|
|00001a50| 69 6f 6e 73 20 28 4f 62 | 6a 65 63 74 2c 20 52 61 |ions (Ob|ject, Ra|
|00001a60| 79 2c 20 44 65 70 74 68 | 5f 53 74 61 63 6b 29 0d |y, Depth|_Stack).|
|00001a70| 4f 42 4a 45 43 54 20 2a | 4f 62 6a 65 63 74 3b 0d |OBJECT *|Object;.|
|00001a80| 52 41 59 20 2a 52 61 79 | 3b 0d 49 53 54 41 43 4b |RAY *Ray|;.ISTACK|
|00001a90| 20 2a 44 65 70 74 68 5f | 53 74 61 63 6b 3b 0d 20 | *Depth_|Stack;. |
|00001aa0| 20 7b 0d 20 20 44 42 4c | 20 44 65 70 74 68 3b 0d | {. DBL| Depth;.|
|00001ab0| 20 20 56 45 43 54 4f 52 | 20 49 50 6f 69 6e 74 3b | VECTOR| IPoint;|
|00001ac0| 0d 0d 20 20 69 66 20 28 | 49 6e 74 65 72 73 65 63 |.. if (|Intersec|
|00001ad0| 74 5f 54 72 69 61 6e 67 | 6c 65 20 28 52 61 79 2c |t_Triang|le (Ray,|
|00001ae0| 20 28 54 52 49 41 4e 47 | 4c 45 20 2a 29 4f 62 6a | (TRIANG|LE *)Obj|
|00001af0| 65 63 74 2c 20 26 44 65 | 70 74 68 29 29 0d 20 20 |ect, &De|pth)). |
|00001b00| 20 20 7b 0d 20 20 20 20 | 56 53 63 61 6c 65 20 28 | {. |VScale (|
|00001b10| 49 50 6f 69 6e 74 2c 20 | 52 61 79 20 2d 3e 20 44 |IPoint, |Ray -> D|
|00001b20| 69 72 65 63 74 69 6f 6e | 2c 20 44 65 70 74 68 29 |irection|, Depth)|
|00001b30| 3b 0d 20 20 20 20 56 41 | 64 64 45 71 20 28 49 50 |;. VA|ddEq (IP|
|00001b40| 6f 69 6e 74 2c 20 52 61 | 79 20 2d 3e 20 49 6e 69 |oint, Ra|y -> Ini|
|00001b50| 74 69 61 6c 29 3b 0d 20 | 20 20 20 69 66 20 28 50 |tial);. | if (P|
|00001b60| 6f 69 6e 74 5f 49 6e 5f | 43 6c 69 70 28 26 49 50 |oint_In_|Clip(&IP|
|00001b70| 6f 69 6e 74 2c 4f 62 6a | 65 63 74 2d 3e 43 6c 69 |oint,Obj|ect->Cli|
|00001b80| 70 29 29 0d 20 20 20 20 | 20 20 7b 0d 20 20 20 20 |p)). | {. |
|00001b90| 20 20 70 75 73 68 5f 65 | 6e 74 72 79 28 44 65 70 | push_e|ntry(Dep|
|00001ba0| 74 68 2c 49 50 6f 69 6e | 74 2c 4f 62 6a 65 63 74 |th,IPoin|t,Object|
|00001bb0| 2c 44 65 70 74 68 5f 53 | 74 61 63 6b 29 3b 0d 20 |,Depth_S|tack);. |
|00001bc0| 20 20 20 20 20 72 65 74 | 75 72 6e 20 28 54 52 55 | ret|urn (TRU|
|00001bd0| 45 29 3b 0d 20 20 20 20 | 20 20 7d 0d 20 20 20 20 |E);. | }. |
|00001be0| 7d 0d 20 20 72 65 74 75 | 72 6e 20 28 46 41 4c 53 |}. retu|rn (FALS|
|00001bf0| 45 29 3b 0d 20 20 7d 0d | 0d 69 6e 74 20 49 6e 74 |E);. }.|.int Int|
|00001c00| 65 72 73 65 63 74 5f 54 | 72 69 61 6e 67 6c 65 20 |ersect_T|riangle |
|00001c10| 28 52 61 79 2c 20 54 72 | 69 61 6e 67 6c 65 2c 20 |(Ray, Tr|iangle, |
|00001c20| 44 65 70 74 68 29 0d 52 | 41 59 20 2a 52 61 79 3b |Depth).R|AY *Ray;|
|00001c30| 0d 54 52 49 41 4e 47 4c | 45 20 2a 54 72 69 61 6e |.TRIANGL|E *Trian|
|00001c40| 67 6c 65 3b 0d 44 42 4c | 20 2a 44 65 70 74 68 3b |gle;.DBL| *Depth;|
|00001c50| 0d 20 20 7b 0d 20 20 44 | 42 4c 20 4e 6f 72 6d 61 |. {. D|BL Norma|
|00001c60| 6c 44 6f 74 4f 72 69 67 | 69 6e 2c 20 4e 6f 72 6d |lDotOrig|in, Norm|
|00001c70| 61 6c 44 6f 74 44 69 72 | 65 63 74 69 6f 6e 3b 0d |alDotDir|ection;.|
|00001c80| 20 20 44 42 4c 20 73 2c | 20 74 3b 0d 0d 20 20 52 | DBL s,| t;.. R|
|00001c90| 61 79 5f 54 72 69 61 6e | 67 6c 65 5f 54 65 73 74 |ay_Trian|gle_Test|
|00001ca0| 73 2b 2b 3b 0d 20 20 69 | 66 28 54 72 69 61 6e 67 |s++;. i|f(Triang|
|00001cb0| 6c 65 2d 3e 44 65 67 65 | 6e 65 72 61 74 65 5f 46 |le->Dege|nerate_F|
|00001cc0| 6c 61 67 29 0d 20 20 20 | 20 72 65 74 75 72 6e 28 |lag). | return(|
|00001cd0| 46 41 4c 53 45 29 3b 0d | 0d 20 20 69 66 20 28 52 |FALSE);.|. if (R|
|00001ce0| 61 79 20 3d 3d 20 43 4d | 5f 52 61 79 29 20 0d 20 |ay == CM|_Ray) . |
|00001cf0| 20 20 20 7b 0d 20 20 20 | 20 69 66 20 28 21 54 72 | {. | if (!Tr|
|00001d00| 69 61 6e 67 6c 65 2d 3e | 43 4d 43 61 63 68 65 64 |iangle->|CMCached|
|00001d10| 29 20 0d 20 20 20 20 20 | 20 7b 0d 20 20 20 20 20 |) . | {. |
|00001d20| 20 56 44 6f 74 20 28 54 | 72 69 61 6e 67 6c 65 2d | VDot (T|riangle-|
|00001d30| 3e 43 4d 4e 6f 72 6d 44 | 6f 74 4f 72 69 67 69 6e |>CMNormD|otOrigin|
|00001d40| 2c 20 54 72 69 61 6e 67 | 6c 65 2d 3e 4e 6f 72 6d |, Triang|le->Norm|
|00001d50| 61 6c 5f 56 65 63 74 6f | 72 2c 20 52 61 79 2d 3e |al_Vecto|r, Ray->|
|00001d60| 49 6e 69 74 69 61 6c 29 | 3b 0d 20 20 20 20 20 20 |Initial)|;. |
|00001d70| 54 72 69 61 6e 67 6c 65 | 2d 3e 43 4d 4e 6f 72 6d |Triangle|->CMNorm|
|00001d80| 44 6f 74 4f 72 69 67 69 | 6e 20 2b 3d 20 54 72 69 |DotOrigi|n += Tri|
|00001d90| 61 6e 67 6c 65 2d 3e 44 | 69 73 74 61 6e 63 65 3b |angle->D|istance;|
|00001da0| 0d 20 20 20 20 20 20 54 | 72 69 61 6e 67 6c 65 2d |. T|riangle-|
|00001db0| 3e 43 4d 4e 6f 72 6d 44 | 6f 74 4f 72 69 67 69 6e |>CMNormD|otOrigin|
|00001dc0| 20 2a 3d 20 2d 31 2e 30 | 3b 0d 20 20 20 20 20 20 | *= -1.0|;. |
|00001dd0| 54 72 69 61 6e 67 6c 65 | 2d 3e 43 4d 43 61 63 68 |Triangle|->CMCach|
|00001de0| 65 64 20 3d 20 54 52 55 | 45 3b 0d 20 20 20 20 20 |ed = TRU|E;. |
|00001df0| 20 7d 0d 0d 20 20 20 20 | 56 44 6f 74 20 28 4e 6f | }.. |VDot (No|
|00001e00| 72 6d 61 6c 44 6f 74 44 | 69 72 65 63 74 69 6f 6e |rmalDotD|irection|
|00001e10| 2c 20 54 72 69 61 6e 67 | 6c 65 2d 3e 4e 6f 72 6d |, Triang|le->Norm|
|00001e20| 61 6c 5f 56 65 63 74 6f | 72 2c 20 52 61 79 2d 3e |al_Vecto|r, Ray->|
|00001e30| 44 69 72 65 63 74 69 6f | 6e 29 3b 0d 20 20 20 20 |Directio|n);. |
|00001e40| 69 66 20 28 28 4e 6f 72 | 6d 61 6c 44 6f 74 44 69 |if ((Nor|malDotDi|
|00001e50| 72 65 63 74 69 6f 6e 20 | 3c 20 53 6d 61 6c 6c 5f |rection |< Small_|
|00001e60| 54 6f 6c 65 72 61 6e 63 | 65 29 20 26 26 0d 20 20 |Toleranc|e) &&. |
|00001e70| 20 20 20 20 28 4e 6f 72 | 6d 61 6c 44 6f 74 44 69 | (Nor|malDotDi|
|00001e80| 72 65 63 74 69 6f 6e 20 | 3e 20 2d 53 6d 61 6c 6c |rection |> -Small|
|00001e90| 5f 54 6f 6c 65 72 61 6e | 63 65 29 29 0d 20 20 20 |_Toleran|ce)). |
|00001ea0| 20 20 20 72 65 74 75 72 | 6e 20 28 46 41 4c 53 45 | retur|n (FALSE|
|00001eb0| 29 3b 0d 0d 20 20 20 20 | 2a 44 65 70 74 68 20 3d |);.. |*Depth =|
|00001ec0| 20 54 72 69 61 6e 67 6c | 65 2d 3e 43 4d 4e 6f 72 | Triangl|e->CMNor|
|00001ed0| 6d 44 6f 74 4f 72 69 67 | 69 6e 20 2f 20 4e 6f 72 |mDotOrig|in / Nor|
|00001ee0| 6d 61 6c 44 6f 74 44 69 | 72 65 63 74 69 6f 6e 3b |malDotDi|rection;|
|00001ef0| 0d 20 20 20 20 7d 0d 20 | 20 65 6c 73 65 20 0d 20 |. }. | else . |
|00001f00| 20 20 20 7b 0d 20 20 20 | 20 56 44 6f 74 20 28 4e | {. | VDot (N|
|00001f10| 6f 72 6d 61 6c 44 6f 74 | 4f 72 69 67 69 6e 2c 20 |ormalDot|Origin, |
|00001f20| 54 72 69 61 6e 67 6c 65 | 2d 3e 4e 6f 72 6d 61 6c |Triangle|->Normal|
|00001f30| 5f 56 65 63 74 6f 72 2c | 20 52 61 79 2d 3e 49 6e |_Vector,| Ray->In|
|00001f40| 69 74 69 61 6c 29 3b 0d | 20 20 20 20 4e 6f 72 6d |itial);.| Norm|
|00001f50| 61 6c 44 6f 74 4f 72 69 | 67 69 6e 20 2b 3d 20 54 |alDotOri|gin += T|
|00001f60| 72 69 61 6e 67 6c 65 2d | 3e 44 69 73 74 61 6e 63 |riangle-|>Distanc|
|00001f70| 65 3b 0d 20 20 20 20 4e | 6f 72 6d 61 6c 44 6f 74 |e;. N|ormalDot|
|00001f80| 4f 72 69 67 69 6e 20 2a | 3d 20 2d 31 2e 30 3b 0d |Origin *|= -1.0;.|
|00001f90| 0d 20 20 20 20 56 44 6f | 74 20 28 4e 6f 72 6d 61 |. VDo|t (Norma|
|00001fa0| 6c 44 6f 74 44 69 72 65 | 63 74 69 6f 6e 2c 20 54 |lDotDire|ction, T|
|00001fb0| 72 69 61 6e 67 6c 65 2d | 3e 4e 6f 72 6d 61 6c 5f |riangle-|>Normal_|
|00001fc0| 56 65 63 74 6f 72 2c 20 | 52 61 79 2d 3e 44 69 72 |Vector, |Ray->Dir|
|00001fd0| 65 63 74 69 6f 6e 29 3b | 0d 20 20 20 20 69 66 20 |ection);|. if |
|00001fe0| 28 28 4e 6f 72 6d 61 6c | 44 6f 74 44 69 72 65 63 |((Normal|DotDirec|
|00001ff0| 74 69 6f 6e 20 3c 20 53 | 6d 61 6c 6c 5f 54 6f 6c |tion < S|mall_Tol|
|00002000| 65 72 61 6e 63 65 29 20 | 26 26 0d 20 20 20 20 20 |erance) |&&. |
|00002010| 20 28 4e 6f 72 6d 61 6c | 44 6f 74 44 69 72 65 63 | (Normal|DotDirec|
|00002020| 74 69 6f 6e 20 3e 20 2d | 53 6d 61 6c 6c 5f 54 6f |tion > -|Small_To|
|00002030| 6c 65 72 61 6e 63 65 29 | 29 0d 20 20 20 20 20 20 |lerance)|). |
|00002040| 72 65 74 75 72 6e 20 28 | 46 41 4c 53 45 29 3b 0d |return (|FALSE);.|
|00002050| 0d 20 20 20 20 2a 44 65 | 70 74 68 20 3d 20 4e 6f |. *De|pth = No|
|00002060| 72 6d 61 6c 44 6f 74 4f | 72 69 67 69 6e 20 2f 20 |rmalDotO|rigin / |
|00002070| 4e 6f 72 6d 61 6c 44 6f | 74 44 69 72 65 63 74 69 |NormalDo|tDirecti|
|00002080| 6f 6e 3b 0d 20 20 20 20 | 7d 0d 0d 20 20 69 66 20 |on;. |}.. if |
|00002090| 28 28 2a 44 65 70 74 68 | 20 3c 20 53 6d 61 6c 6c |((*Depth| < Small|
|000020a0| 5f 54 6f 6c 65 72 61 6e | 63 65 29 20 7c 7c 20 28 |_Toleran|ce) || (|
|000020b0| 2a 44 65 70 74 68 20 3e | 20 4d 61 78 5f 44 69 73 |*Depth >| Max_Dis|
|000020c0| 74 61 6e 63 65 29 29 0d | 20 20 20 20 72 65 74 75 |tance)).| retu|
|000020d0| 72 6e 20 28 46 41 4c 53 | 45 29 3b 0d 0d 20 20 73 |rn (FALS|E);.. s|
|000020e0| 77 69 74 63 68 20 28 54 | 72 69 61 6e 67 6c 65 2d |witch (T|riangle-|
|000020f0| 3e 44 6f 6d 69 6e 61 6e | 74 5f 41 78 69 73 29 20 |>Dominan|t_Axis) |
|00002100| 0d 20 20 7b 0d 20 20 63 | 61 73 65 20 58 5f 41 58 |. {. c|ase X_AX|
|00002110| 49 53 3a 0d 20 20 20 20 | 73 20 3d 20 52 61 79 2d |IS:. |s = Ray-|
|00002120| 3e 49 6e 69 74 69 61 6c | 2e 79 20 2b 20 2a 44 65 |>Initial|.y + *De|
|00002130| 70 74 68 20 2a 20 52 61 | 79 2d 3e 44 69 72 65 63 |pth * Ra|y->Direc|
|00002140| 74 69 6f 6e 2e 79 3b 0d | 20 20 20 20 74 20 3d 20 |tion.y;.| t = |
|00002150| 52 61 79 2d 3e 49 6e 69 | 74 69 61 6c 2e 7a 20 2b |Ray->Ini|tial.z +|
|00002160| 20 2a 44 65 70 74 68 20 | 2a 20 52 61 79 2d 3e 44 | *Depth |* Ray->D|
|00002170| 69 72 65 63 74 69 6f 6e | 2e 7a 3b 0d 0d 20 20 20 |irection|.z;.. |
|00002180| 20 69 66 20 28 28 54 72 | 69 61 6e 67 6c 65 2d 3e | if ((Tr|iangle->|
|00002190| 50 32 2e 79 20 2d 20 73 | 29 2a 28 54 72 69 61 6e |P2.y - s|)*(Trian|
|000021a0| 67 6c 65 2d 3e 50 32 2e | 7a 20 2d 20 54 72 69 61 |gle->P2.|z - Tria|
|000021b0| 6e 67 6c 65 2d 3e 50 31 | 2e 7a 29 20 3c 0d 20 20 |ngle->P1|.z) <. |
|000021c0| 20 20 20 20 28 54 72 69 | 61 6e 67 6c 65 2d 3e 50 | (Tri|angle->P|
|000021d0| 32 2e 7a 20 2d 20 74 29 | 2a 28 54 72 69 61 6e 67 |2.z - t)|*(Triang|
|000021e0| 6c 65 2d 3e 50 32 2e 79 | 20 2d 20 54 72 69 61 6e |le->P2.y| - Trian|
|000021f0| 67 6c 65 2d 3e 50 31 2e | 79 29 29 0d 20 20 20 20 |gle->P1.|y)). |
|00002200| 20 20 72 65 74 75 72 6e | 20 28 46 41 4c 53 45 29 | return| (FALSE)|
|00002210| 3b 0d 0d 20 20 20 20 69 | 66 20 28 28 54 72 69 61 |;.. i|f ((Tria|
|00002220| 6e 67 6c 65 2d 3e 50 33 | 2e 79 20 2d 20 73 29 2a |ngle->P3|.y - s)*|
|00002230| 28 54 72 69 61 6e 67 6c | 65 2d 3e 50 33 2e 7a 20 |(Triangl|e->P3.z |
|00002240| 2d 20 54 72 69 61 6e 67 | 6c 65 2d 3e 50 32 2e 7a |- Triang|le->P2.z|
|00002250| 29 20 3c 0d 20 20 20 20 | 20 20 28 54 72 69 61 6e |) <. | (Trian|
|00002260| 67 6c 65 2d 3e 50 33 2e | 7a 20 2d 20 74 29 2a 28 |gle->P3.|z - t)*(|
|00002270| 54 72 69 61 6e 67 6c 65 | 2d 3e 50 33 2e 79 20 2d |Triangle|->P3.y -|
|00002280| 20 54 72 69 61 6e 67 6c | 65 2d 3e 50 32 2e 79 29 | Triangl|e->P2.y)|
|00002290| 29 0d 20 20 20 20 20 20 | 72 65 74 75 72 6e 20 28 |). |return (|
|000022a0| 46 41 4c 53 45 29 3b 0d | 0d 20 20 20 20 69 66 20 |FALSE);.|. if |
|000022b0| 28 28 54 72 69 61 6e 67 | 6c 65 2d 3e 50 31 2e 79 |((Triang|le->P1.y|
|000022c0| 20 2d 20 73 29 2a 28 54 | 72 69 61 6e 67 6c 65 2d | - s)*(T|riangle-|
|000022d0| 3e 50 31 2e 7a 20 2d 20 | 54 72 69 61 6e 67 6c 65 |>P1.z - |Triangle|
|000022e0| 2d 3e 50 33 2e 7a 29 20 | 3c 0d 20 20 20 20 20 20 |->P3.z) |<. |
|000022f0| 28 54 72 69 61 6e 67 6c | 65 2d 3e 50 31 2e 7a 20 |(Triangl|e->P1.z |
|00002300| 2d 20 74 29 2a 28 54 72 | 69 61 6e 67 6c 65 2d 3e |- t)*(Tr|iangle->|
|00002310| 50 31 2e 79 20 2d 20 54 | 72 69 61 6e 67 6c 65 2d |P1.y - T|riangle-|
|00002320| 3e 50 33 2e 79 29 29 0d | 20 20 20 20 20 20 72 65 |>P3.y)).| re|
|00002330| 74 75 72 6e 20 28 46 41 | 4c 53 45 29 3b 0d 0d 20 |turn (FA|LSE);.. |
|00002340| 20 20 20 52 61 79 5f 54 | 72 69 61 6e 67 6c 65 5f | Ray_T|riangle_|
|00002350| 54 65 73 74 73 5f 53 75 | 63 63 65 65 64 65 64 2b |Tests_Su|cceeded+|
|00002360| 2b 3b 0d 20 20 20 20 72 | 65 74 75 72 6e 20 28 54 |+;. r|eturn (T|
|00002370| 52 55 45 29 3b 0d 0d 20 | 20 63 61 73 65 20 59 5f |RUE);.. | case Y_|
|00002380| 41 58 49 53 3a 0d 20 20 | 20 20 73 20 3d 20 52 61 |AXIS:. | s = Ra|
|00002390| 79 2d 3e 49 6e 69 74 69 | 61 6c 2e 78 20 2b 20 2a |y->Initi|al.x + *|
|000023a0| 44 65 70 74 68 20 2a 20 | 52 61 79 2d 3e 44 69 72 |Depth * |Ray->Dir|
|000023b0| 65 63 74 69 6f 6e 2e 78 | 3b 0d 20 20 20 20 74 20 |ection.x|;. t |
|000023c0| 3d 20 52 61 79 2d 3e 49 | 6e 69 74 69 61 6c 2e 7a |= Ray->I|nitial.z|
|000023d0| 20 2b 20 2a 44 65 70 74 | 68 20 2a 20 52 61 79 2d | + *Dept|h * Ray-|
|000023e0| 3e 44 69 72 65 63 74 69 | 6f 6e 2e 7a 3b 0d 0d 20 |>Directi|on.z;.. |
|000023f0| 20 20 20 69 66 20 28 28 | 54 72 69 61 6e 67 6c 65 | if ((|Triangle|
|00002400| 2d 3e 50 32 2e 78 20 2d | 20 73 29 2a 28 54 72 69 |->P2.x -| s)*(Tri|
|00002410| 61 6e 67 6c 65 2d 3e 50 | 32 2e 7a 20 2d 20 54 72 |angle->P|2.z - Tr|
|00002420| 69 61 6e 67 6c 65 2d 3e | 50 31 2e 7a 29 20 3c 0d |iangle->|P1.z) <.|
|00002430| 20 20 20 20 20 20 28 54 | 72 69 61 6e 67 6c 65 2d | (T|riangle-|
|00002440| 3e 50 32 2e 7a 20 2d 20 | 74 29 2a 28 54 72 69 61 |>P2.z - |t)*(Tria|
|00002450| 6e 67 6c 65 2d 3e 50 32 | 2e 78 20 2d 20 54 72 69 |ngle->P2|.x - Tri|
|00002460| 61 6e 67 6c 65 2d 3e 50 | 31 2e 78 29 29 0d 20 20 |angle->P|1.x)). |
|00002470| 20 20 20 20 72 65 74 75 | 72 6e 20 28 46 41 4c 53 | retu|rn (FALS|
|00002480| 45 29 3b 0d 0d 20 20 20 | 20 69 66 20 28 28 54 72 |E);.. | if ((Tr|
|00002490| 69 61 6e 67 6c 65 2d 3e | 50 33 2e 78 20 2d 20 73 |iangle->|P3.x - s|
|000024a0| 29 2a 28 54 72 69 61 6e | 67 6c 65 2d 3e 50 33 2e |)*(Trian|gle->P3.|
|000024b0| 7a 20 2d 20 54 72 69 61 | 6e 67 6c 65 2d 3e 50 32 |z - Tria|ngle->P2|
|000024c0| 2e 7a 29 20 3c 0d 20 20 | 20 20 20 20 28 54 72 69 |.z) <. | (Tri|
|000024d0| 61 6e 67 6c 65 2d 3e 50 | 33 2e 7a 20 2d 20 74 29 |angle->P|3.z - t)|
|000024e0| 2a 28 54 72 69 61 6e 67 | 6c 65 2d 3e 50 33 2e 78 |*(Triang|le->P3.x|
|000024f0| 20 2d 20 54 72 69 61 6e | 67 6c 65 2d 3e 50 32 2e | - Trian|gle->P2.|
|00002500| 78 29 29 0d 20 20 20 20 | 20 20 72 65 74 75 72 6e |x)). | return|
|00002510| 20 28 46 41 4c 53 45 29 | 3b 0d 0d 20 20 20 20 69 | (FALSE)|;.. i|
|00002520| 66 20 28 28 54 72 69 61 | 6e 67 6c 65 2d 3e 50 31 |f ((Tria|ngle->P1|
|00002530| 2e 78 20 2d 20 73 29 2a | 28 54 72 69 61 6e 67 6c |.x - s)*|(Triangl|
|00002540| 65 2d 3e 50 31 2e 7a 20 | 2d 20 54 72 69 61 6e 67 |e->P1.z |- Triang|
|00002550| 6c 65 2d 3e 50 33 2e 7a | 29 20 3c 0d 20 20 20 20 |le->P3.z|) <. |
|00002560| 20 20 28 54 72 69 61 6e | 67 6c 65 2d 3e 50 31 2e | (Trian|gle->P1.|
|00002570| 7a 20 2d 20 74 29 2a 28 | 54 72 69 61 6e 67 6c 65 |z - t)*(|Triangle|
|00002580| 2d 3e 50 31 2e 78 20 2d | 20 54 72 69 61 6e 67 6c |->P1.x -| Triangl|
|00002590| 65 2d 3e 50 33 2e 78 29 | 29 0d 20 20 20 20 20 20 |e->P3.x)|). |
|000025a0| 72 65 74 75 72 6e 20 28 | 46 41 4c 53 45 29 3b 0d |return (|FALSE);.|
|000025b0| 0d 20 20 20 20 52 61 79 | 5f 54 72 69 61 6e 67 6c |. Ray|_Triangl|
|000025c0| 65 5f 54 65 73 74 73 5f | 53 75 63 63 65 65 64 65 |e_Tests_|Succeede|
|000025d0| 64 2b 2b 3b 0d 20 20 20 | 20 72 65 74 75 72 6e 20 |d++;. | return |
|000025e0| 28 54 52 55 45 29 3b 0d | 0d 20 20 63 61 73 65 20 |(TRUE);.|. case |
|000025f0| 5a 5f 41 58 49 53 3a 0d | 20 20 20 20 73 20 3d 20 |Z_AXIS:.| s = |
|00002600| 52 61 79 2d 3e 49 6e 69 | 74 69 61 6c 2e 78 20 2b |Ray->Ini|tial.x +|
|00002610| 20 2a 44 65 70 74 68 20 | 2a 20 52 61 79 2d 3e 44 | *Depth |* Ray->D|
|00002620| 69 72 65 63 74 69 6f 6e | 2e 78 3b 0d 20 20 20 20 |irection|.x;. |
|00002630| 74 20 3d 20 52 61 79 2d | 3e 49 6e 69 74 69 61 6c |t = Ray-|>Initial|
|00002640| 2e 79 20 2b 20 2a 44 65 | 70 74 68 20 2a 20 52 61 |.y + *De|pth * Ra|
|00002650| 79 2d 3e 44 69 72 65 63 | 74 69 6f 6e 2e 79 3b 0d |y->Direc|tion.y;.|
|00002660| 0d 20 20 20 20 69 66 20 | 28 28 54 72 69 61 6e 67 |. if |((Triang|
|00002670| 6c 65 2d 3e 50 32 2e 78 | 20 2d 20 73 29 2a 28 54 |le->P2.x| - s)*(T|
|00002680| 72 69 61 6e 67 6c 65 2d | 3e 50 32 2e 79 20 2d 20 |riangle-|>P2.y - |
|00002690| 54 72 69 61 6e 67 6c 65 | 2d 3e 50 31 2e 79 29 20 |Triangle|->P1.y) |
|000026a0| 3c 0d 20 20 20 20 20 20 | 28 54 72 69 61 6e 67 6c |<. |(Triangl|
|000026b0| 65 2d 3e 50 32 2e 79 20 | 2d 20 74 29 2a 28 54 72 |e->P2.y |- t)*(Tr|
|000026c0| 69 61 6e 67 6c 65 2d 3e | 50 32 2e 78 20 2d 20 54 |iangle->|P2.x - T|
|000026d0| 72 69 61 6e 67 6c 65 2d | 3e 50 31 2e 78 29 29 0d |riangle-|>P1.x)).|
|000026e0| 20 20 20 20 20 20 72 65 | 74 75 72 6e 20 28 46 41 | re|turn (FA|
|000026f0| 4c 53 45 29 3b 0d 0d 20 | 20 20 20 69 66 20 28 28 |LSE);.. | if ((|
|00002700| 54 72 69 61 6e 67 6c 65 | 2d 3e 50 33 2e 78 20 2d |Triangle|->P3.x -|
|00002710| 20 73 29 2a 28 54 72 69 | 61 6e 67 6c 65 2d 3e 50 | s)*(Tri|angle->P|
|00002720| 33 2e 79 20 2d 20 54 72 | 69 61 6e 67 6c 65 2d 3e |3.y - Tr|iangle->|
|00002730| 50 32 2e 79 29 20 3c 0d | 20 20 20 20 20 20 28 54 |P2.y) <.| (T|
|00002740| 72 69 61 6e 67 6c 65 2d | 3e 50 33 2e 79 20 2d 20 |riangle-|>P3.y - |
|00002750| 74 29 2a 28 54 72 69 61 | 6e 67 6c 65 2d 3e 50 33 |t)*(Tria|ngle->P3|
|00002760| 2e 78 20 2d 20 54 72 69 | 61 6e 67 6c 65 2d 3e 50 |.x - Tri|angle->P|
|00002770| 32 2e 78 29 29 0d 20 20 | 20 20 20 20 72 65 74 75 |2.x)). | retu|
|00002780| 72 6e 20 28 46 41 4c 53 | 45 29 3b 0d 0d 20 20 20 |rn (FALS|E);.. |
|00002790| 20 69 66 20 28 28 54 72 | 69 61 6e 67 6c 65 2d 3e | if ((Tr|iangle->|
|000027a0| 50 31 2e 78 20 2d 20 73 | 29 2a 28 54 72 69 61 6e |P1.x - s|)*(Trian|
|000027b0| 67 6c 65 2d 3e 50 31 2e | 79 20 2d 20 54 72 69 61 |gle->P1.|y - Tria|
|000027c0| 6e 67 6c 65 2d 3e 50 33 | 2e 79 29 20 3c 0d 20 20 |ngle->P3|.y) <. |
|000027d0| 20 20 20 20 28 54 72 69 | 61 6e 67 6c 65 2d 3e 50 | (Tri|angle->P|
|000027e0| 31 2e 79 20 2d 20 74 29 | 2a 28 54 72 69 61 6e 67 |1.y - t)|*(Triang|
|000027f0| 6c 65 2d 3e 50 31 2e 78 | 20 2d 20 54 72 69 61 6e |le->P1.x| - Trian|
|00002800| 67 6c 65 2d 3e 50 33 2e | 78 29 29 0d 20 20 20 20 |gle->P3.|x)). |
|00002810| 20 20 72 65 74 75 72 6e | 20 28 46 41 4c 53 45 29 | return| (FALSE)|
|00002820| 3b 0d 0d 20 20 20 20 52 | 61 79 5f 54 72 69 61 6e |;.. R|ay_Trian|
|00002830| 67 6c 65 5f 54 65 73 74 | 73 5f 53 75 63 63 65 65 |gle_Test|s_Succee|
|00002840| 64 65 64 2b 2b 3b 0d 20 | 20 20 20 72 65 74 75 72 |ded++;. | retur|
|00002850| 6e 20 28 54 52 55 45 29 | 3b 0d 20 20 7d 0d 20 20 |n (TRUE)|;. }. |
|00002860| 72 65 74 75 72 6e 20 28 | 46 41 4c 53 45 29 3b 0d |return (|FALSE);.|
|00002870| 20 20 7d 0d 0d 69 6e 74 | 20 49 6e 73 69 64 65 5f | }..int| Inside_|
|00002880| 54 72 69 61 6e 67 6c 65 | 20 28 49 50 6f 69 6e 74 |Triangle| (IPoint|
|00002890| 2c 20 4f 62 6a 65 63 74 | 29 0d 56 45 43 54 4f 52 |, Object|).VECTOR|
|000028a0| 20 2a 49 50 6f 69 6e 74 | 3b 0d 4f 42 4a 45 43 54 | *IPoint|;.OBJECT|
|000028b0| 20 2a 4f 62 6a 65 63 74 | 3b 0d 20 20 7b 0d 20 20 | *Object|;. {. |
|000028c0| 72 65 74 75 72 6e 20 28 | 46 41 4c 53 45 29 3b 0d |return (|FALSE);.|
|000028d0| 20 20 7d 0d 0d 76 6f 69 | 64 20 54 72 69 61 6e 67 | }..voi|d Triang|
|000028e0| 6c 65 5f 4e 6f 72 6d 61 | 6c 20 28 52 65 73 75 6c |le_Norma|l (Resul|
|000028f0| 74 2c 20 4f 62 6a 65 63 | 74 2c 20 49 50 6f 69 6e |t, Objec|t, IPoin|
|00002900| 74 29 0d 4f 42 4a 45 43 | 54 20 2a 4f 62 6a 65 63 |t).OBJEC|T *Objec|
|00002910| 74 3b 0d 56 45 43 54 4f | 52 20 2a 52 65 73 75 6c |t;.VECTO|R *Resul|
|00002920| 74 2c 20 2a 49 50 6f 69 | 6e 74 3b 0d 20 20 7b 0d |t, *IPoi|nt;. {.|
|00002930| 20 20 2a 52 65 73 75 6c | 74 20 3d 20 28 28 54 52 | *Resul|t = ((TR|
|00002940| 49 41 4e 47 4c 45 20 2a | 29 4f 62 6a 65 63 74 29 |IANGLE *|)Object)|
|00002950| 2d 3e 4e 6f 72 6d 61 6c | 5f 56 65 63 74 6f 72 3b |->Normal|_Vector;|
|00002960| 0d 20 20 7d 0d 0d 76 6f | 69 64 20 2a 43 6f 70 79 |. }..vo|id *Copy|
|00002970| 5f 54 72 69 61 6e 67 6c | 65 20 28 4f 62 6a 65 63 |_Triangl|e (Objec|
|00002980| 74 29 0d 4f 42 4a 45 43 | 54 20 2a 4f 62 6a 65 63 |t).OBJEC|T *Objec|
|00002990| 74 3b 0d 20 20 7b 0d 20 | 20 54 52 49 41 4e 47 4c |t;. {. | TRIANGL|
|000029a0| 45 20 2a 4e 65 77 3b 0d | 0d 20 20 4e 65 77 20 3d |E *New;.|. New =|
|000029b0| 20 43 72 65 61 74 65 5f | 54 72 69 61 6e 67 6c 65 | Create_|Triangle|
|000029c0| 20 28 29 3b 0d 20 20 2a | 4e 65 77 20 3d 20 2a 20 | ();. *|New = * |
|000029d0| 28 28 54 52 49 41 4e 47 | 4c 45 20 2a 29 4f 62 6a |((TRIANG|LE *)Obj|
|000029e0| 65 63 74 29 3b 0d 0d 20 | 20 72 65 74 75 72 6e 20 |ect);.. | return |
|000029f0| 28 4e 65 77 29 3b 0d 20 | 20 7d 0d 0d 76 6f 69 64 |(New);. | }..void|
|00002a00| 20 54 72 61 6e 73 6c 61 | 74 65 5f 54 72 69 61 6e | Transla|te_Trian|
|00002a10| 67 6c 65 20 28 4f 62 6a | 65 63 74 2c 20 56 65 63 |gle (Obj|ect, Vec|
|00002a20| 74 6f 72 29 0d 4f 42 4a | 45 43 54 20 2a 4f 62 6a |tor).OBJ|ECT *Obj|
|00002a30| 65 63 74 3b 0d 56 45 43 | 54 4f 52 20 2a 56 65 63 |ect;.VEC|TOR *Vec|
|00002a40| 74 6f 72 3b 0d 20 20 7b | 0d 20 20 54 52 49 41 4e |tor;. {|. TRIAN|
|00002a50| 47 4c 45 20 2a 54 72 69 | 61 6e 67 6c 65 20 3d 20 |GLE *Tri|angle = |
|00002a60| 28 54 52 49 41 4e 47 4c | 45 20 2a 29 20 4f 62 6a |(TRIANGL|E *) Obj|
|00002a70| 65 63 74 3b 0d 20 20 56 | 45 43 54 4f 52 20 54 72 |ect;. V|ECTOR Tr|
|00002a80| 61 6e 73 6c 61 74 69 6f | 6e 3b 0d 0d 20 20 69 66 |anslatio|n;.. if|
|00002a90| 28 54 72 69 61 6e 67 6c | 65 2d 3e 44 65 67 65 6e |(Triangl|e->Degen|
|00002aa0| 65 72 61 74 65 5f 46 6c | 61 67 29 20 72 65 74 75 |erate_Fl|ag) retu|
|00002ab0| 72 6e 3b 0d 0d 20 20 56 | 45 76 61 6c 75 61 74 65 |rn;.. V|Evaluate|
|00002ac0| 20 28 54 72 61 6e 73 6c | 61 74 69 6f 6e 2c 20 54 | (Transl|ation, T|
|00002ad0| 72 69 61 6e 67 6c 65 2d | 3e 4e 6f 72 6d 61 6c 5f |riangle-|>Normal_|
|00002ae0| 56 65 63 74 6f 72 2c 20 | 2a 56 65 63 74 6f 72 29 |Vector, |*Vector)|
|00002af0| 3b 0d 20 20 54 72 69 61 | 6e 67 6c 65 2d 3e 44 69 |;. Tria|ngle->Di|
|00002b00| 73 74 61 6e 63 65 20 2d | 3d 20 54 72 61 6e 73 6c |stance -|= Transl|
|00002b10| 61 74 69 6f 6e 2e 78 20 | 2b 20 54 72 61 6e 73 6c |ation.x |+ Transl|
|00002b20| 61 74 69 6f 6e 2e 79 20 | 2b 20 54 72 61 6e 73 6c |ation.y |+ Transl|
|00002b30| 61 74 69 6f 6e 2e 7a 3b | 0d 20 20 56 41 64 64 45 |ation.z;|. VAddE|
|00002b40| 71 20 28 54 72 69 61 6e | 67 6c 65 2d 3e 50 31 2c |q (Trian|gle->P1,|
|00002b50| 20 2a 56 65 63 74 6f 72 | 29 0d 20 20 20 20 56 41 | *Vector|). VA|
|00002b60| 64 64 45 71 20 28 54 72 | 69 61 6e 67 6c 65 2d 3e |ddEq (Tr|iangle->|
|00002b70| 50 32 2c 20 2a 56 65 63 | 74 6f 72 29 0d 20 20 20 |P2, *Vec|tor). |
|00002b80| 20 20 20 56 41 64 64 45 | 71 20 28 54 72 69 61 6e | VAddE|q (Trian|
|00002b90| 67 6c 65 2d 3e 50 33 2c | 20 2a 56 65 63 74 6f 72 |gle->P3,| *Vector|
|00002ba0| 29 0d 0d 20 20 20 20 20 | 20 20 20 2f 2a 20 52 65 |).. | /* Re|
|00002bb0| 63 61 6c 63 75 6c 61 74 | 65 20 74 68 65 20 62 6f |calculat|e the bo|
|00002bc0| 75 6e 64 73 20 2a 2f 0d | 20 20 20 20 20 20 20 20 |unds */.| |
|00002bd0| 56 41 64 64 45 71 28 4f | 62 6a 65 63 74 2d 3e 42 |VAddEq(O|bject->B|
|00002be0| 6f 75 6e 64 73 2e 4c 6f | 77 65 72 5f 4c 65 66 74 |ounds.Lo|wer_Left|
|00002bf0| 2c 20 2a 56 65 63 74 6f | 72 29 3b 0d 20 20 7d 0d |, *Vecto|r);. }.|
|00002c00| 0d 76 6f 69 64 20 52 6f | 74 61 74 65 5f 54 72 69 |.void Ro|tate_Tri|
|00002c10| 61 6e 67 6c 65 20 28 4f | 62 6a 65 63 74 2c 20 56 |angle (O|bject, V|
|00002c20| 65 63 74 6f 72 29 0d 4f | 42 4a 45 43 54 20 2a 4f |ector).O|BJECT *O|
|00002c30| 62 6a 65 63 74 3b 0d 56 | 45 43 54 4f 52 20 2a 56 |bject;.V|ECTOR *V|
|00002c40| 65 63 74 6f 72 3b 0d 20 | 20 7b 0d 20 20 54 52 41 |ector;. | {. TRA|
|00002c50| 4e 53 46 4f 52 4d 20 54 | 72 61 6e 73 3b 0d 0d 20 |NSFORM T|rans;.. |
|00002c60| 20 69 66 28 28 28 54 52 | 49 41 4e 47 4c 45 20 2a | if(((TR|IANGLE *|
|00002c70| 29 4f 62 6a 65 63 74 29 | 2d 3e 44 65 67 65 6e 65 |)Object)|->Degene|
|00002c80| 72 61 74 65 5f 46 6c 61 | 67 29 20 72 65 74 75 72 |rate_Fla|g) retur|
|00002c90| 6e 3b 0d 0d 20 20 43 6f | 6d 70 75 74 65 5f 52 6f |n;.. Co|mpute_Ro|
|00002ca0| 74 61 74 69 6f 6e 5f 54 | 72 61 6e 73 66 6f 72 6d |tation_T|ransform|
|00002cb0| 20 28 26 54 72 61 6e 73 | 2c 20 56 65 63 74 6f 72 | (&Trans|, Vector|
|00002cc0| 29 3b 0d 20 20 54 72 61 | 6e 73 66 6f 72 6d 5f 54 |);. Tra|nsform_T|
|00002cd0| 72 69 61 6e 67 6c 65 20 | 28 4f 62 6a 65 63 74 2c |riangle |(Object,|
|00002ce0| 20 26 54 72 61 6e 73 29 | 3b 0d 20 20 7d 0d 0d 76 | &Trans)|;. }..v|
|00002cf0| 6f 69 64 20 53 63 61 6c | 65 5f 54 72 69 61 6e 67 |oid Scal|e_Triang|
|00002d00| 6c 65 20 28 4f 62 6a 65 | 63 74 2c 20 56 65 63 74 |le (Obje|ct, Vect|
|00002d10| 6f 72 29 0d 4f 42 4a 45 | 43 54 20 2a 4f 62 6a 65 |or).OBJE|CT *Obje|
|00002d20| 63 74 3b 0d 56 45 43 54 | 4f 52 20 2a 56 65 63 74 |ct;.VECT|OR *Vect|
|00002d30| 6f 72 3b 0d 20 20 7b 0d | 20 20 54 52 49 41 4e 47 |or;. {.| TRIANG|
|00002d40| 4c 45 20 2a 54 72 69 61 | 6e 67 6c 65 20 3d 20 28 |LE *Tria|ngle = (|
|00002d50| 54 52 49 41 4e 47 4c 45 | 20 2a 29 20 4f 62 6a 65 |TRIANGLE| *) Obje|
|00002d60| 63 74 3b 0d 20 20 44 42 | 4c 20 4c 65 6e 67 74 68 |ct;. DB|L Length|
|00002d70| 2c 54 31 2c 54 32 2c 54 | 33 3b 0d 0d 20 20 69 66 |,T1,T2,T|3;.. if|
|00002d80| 28 54 72 69 61 6e 67 6c | 65 2d 3e 44 65 67 65 6e |(Triangl|e->Degen|
|00002d90| 65 72 61 74 65 5f 46 6c | 61 67 29 20 72 65 74 75 |erate_Fl|ag) retu|
|00002da0| 72 6e 3b 0d 0d 20 20 54 | 72 69 61 6e 67 6c 65 2d |rn;.. T|riangle-|
|00002db0| 3e 4e 6f 72 6d 61 6c 5f | 56 65 63 74 6f 72 2e 78 |>Normal_|Vector.x|
|00002dc0| 20 3d 20 54 72 69 61 6e | 67 6c 65 2d 3e 4e 6f 72 | = Trian|gle->Nor|
|00002dd0| 6d 61 6c 5f 56 65 63 74 | 6f 72 2e 78 20 2f 20 56 |mal_Vect|or.x / V|
|00002de0| 65 63 74 6f 72 2d 3e 78 | 3b 0d 20 20 54 72 69 61 |ector->x|;. Tria|
|00002df0| 6e 67 6c 65 2d 3e 4e 6f | 72 6d 61 6c 5f 56 65 63 |ngle->No|rmal_Vec|
|00002e00| 74 6f 72 2e 79 20 3d 20 | 54 72 69 61 6e 67 6c 65 |tor.y = |Triangle|
|00002e10| 2d 3e 4e 6f 72 6d 61 6c | 5f 56 65 63 74 6f 72 2e |->Normal|_Vector.|
|00002e20| 79 20 2f 20 56 65 63 74 | 6f 72 2d 3e 79 3b 0d 20 |y / Vect|or->y;. |
|00002e30| 20 54 72 69 61 6e 67 6c | 65 2d 3e 4e 6f 72 6d 61 | Triangl|e->Norma|
|00002e40| 6c 5f 56 65 63 74 6f 72 | 2e 7a 20 3d 20 54 72 69 |l_Vector|.z = Tri|
|00002e50| 61 6e 67 6c 65 2d 3e 4e | 6f 72 6d 61 6c 5f 56 65 |angle->N|ormal_Ve|
|00002e60| 63 74 6f 72 2e 7a 20 2f | 20 56 65 63 74 6f 72 2d |ctor.z /| Vector-|
|00002e70| 3e 7a 3b 0d 0d 20 20 56 | 4c 65 6e 67 74 68 28 4c |>z;.. V|Length(L|
|00002e80| 65 6e 67 74 68 2c 20 54 | 72 69 61 6e 67 6c 65 2d |ength, T|riangle-|
|00002e90| 3e 4e 6f 72 6d 61 6c 5f | 56 65 63 74 6f 72 29 3b |>Normal_|Vector);|
|00002ea0| 0d 20 20 56 49 6e 76 65 | 72 73 65 53 63 61 6c 65 |. VInve|rseScale|
|00002eb0| 45 71 20 28 54 72 69 61 | 6e 67 6c 65 2d 3e 4e 6f |Eq (Tria|ngle->No|
|00002ec0| 72 6d 61 6c 5f 56 65 63 | 74 6f 72 2c 20 4c 65 6e |rmal_Vec|tor, Len|
|00002ed0| 67 74 68 29 3b 0d 20 20 | 54 72 69 61 6e 67 6c 65 |gth);. |Triangle|
|00002ee0| 2d 3e 44 69 73 74 61 6e | 63 65 20 2f 3d 20 4c 65 |->Distan|ce /= Le|
|00002ef0| 6e 67 74 68 3b 0d 0d 20 | 20 56 45 76 61 6c 75 61 |ngth;.. | VEvalua|
|00002f00| 74 65 45 71 20 28 54 72 | 69 61 6e 67 6c 65 2d 3e |teEq (Tr|iangle->|
|00002f10| 50 31 2c 20 2a 56 65 63 | 74 6f 72 29 3b 0d 20 20 |P1, *Vec|tor);. |
|00002f20| 56 45 76 61 6c 75 61 74 | 65 45 71 20 28 54 72 69 |VEvaluat|eEq (Tri|
|00002f30| 61 6e 67 6c 65 2d 3e 50 | 32 2c 20 2a 56 65 63 74 |angle->P|2, *Vect|
|00002f40| 6f 72 29 3b 0d 20 20 56 | 45 76 61 6c 75 61 74 65 |or);. V|Evaluate|
|00002f50| 45 71 20 28 54 72 69 61 | 6e 67 6c 65 2d 3e 50 33 |Eq (Tria|ngle->P3|
|00002f60| 2c 20 2a 56 65 63 74 6f | 72 29 3b 0d 0d 20 20 2f |, *Vecto|r);.. /|
|00002f70| 2a 20 52 65 63 6f 6d 70 | 75 74 65 20 74 68 65 20 |* Recomp|ute the |
|00002f80| 62 6f 75 6e 64 73 20 2a | 2f 0d 20 20 2f 2a 20 55 |bounds *|/. /* U|
|00002f90| 73 65 20 74 65 6d 70 73 | 20 73 6f 20 6d 61 63 72 |se temps| so macr|
|00002fa0| 6f 20 6e 6f 74 20 74 6f | 6f 20 62 69 67 2e 20 2a |o not to|o big. *|
|00002fb0| 2f 0d 20 20 54 31 20 3d | 20 4d 49 4e 33 28 54 72 |/. T1 =| MIN3(Tr|
|00002fc0| 69 61 6e 67 6c 65 2d 3e | 50 31 2e 78 2c 20 54 72 |iangle->|P1.x, Tr|
|00002fd0| 69 61 6e 67 6c 65 2d 3e | 50 32 2e 78 2c 20 54 72 |iangle->|P2.x, Tr|
|00002fe0| 69 61 6e 67 6c 65 2d 3e | 50 33 2e 78 29 3b 0d 20 |iangle->|P3.x);. |
|00002ff0| 20 54 32 20 3d 20 4d 49 | 4e 33 28 54 72 69 61 6e | T2 = MI|N3(Trian|
|00003000| 67 6c 65 2d 3e 50 31 2e | 79 2c 20 54 72 69 61 6e |gle->P1.|y, Trian|
|00003010| 67 6c 65 2d 3e 50 32 2e | 79 2c 20 54 72 69 61 6e |gle->P2.|y, Trian|
|00003020| 67 6c 65 2d 3e 50 33 2e | 79 29 3b 0d 20 20 54 33 |gle->P3.|y);. T3|
|00003030| 20 3d 20 4d 49 4e 33 28 | 54 72 69 61 6e 67 6c 65 | = MIN3(|Triangle|
|00003040| 2d 3e 50 31 2e 7a 2c 20 | 54 72 69 61 6e 67 6c 65 |->P1.z, |Triangle|
|00003050| 2d 3e 50 32 2e 7a 2c 20 | 54 72 69 61 6e 67 6c 65 |->P2.z, |Triangle|
|00003060| 2d 3e 50 33 2e 7a 29 3b | 0d 20 20 4d 61 6b 65 5f |->P3.z);|. Make_|
|00003070| 56 65 63 74 6f 72 28 26 | 54 72 69 61 6e 67 6c 65 |Vector(&|Triangle|
|00003080| 2d 3e 42 6f 75 6e 64 73 | 2e 4c 6f 77 65 72 5f 4c |->Bounds|.Lower_L|
|00003090| 65 66 74 2c 54 31 2c 54 | 32 2c 54 33 29 3b 0d 0d |eft,T1,T|2,T3);..|
|000030a0| 20 20 54 31 20 3d 20 4d | 41 58 33 28 54 72 69 61 | T1 = M|AX3(Tria|
|000030b0| 6e 67 6c 65 2d 3e 50 31 | 2e 78 2c 20 54 72 69 61 |ngle->P1|.x, Tria|
|000030c0| 6e 67 6c 65 2d 3e 50 32 | 2e 78 2c 20 54 72 69 61 |ngle->P2|.x, Tria|
|000030d0| 6e 67 6c 65 2d 3e 50 33 | 2e 78 29 3b 0d 20 20 54 |ngle->P3|.x);. T|
|000030e0| 32 20 3d 20 4d 41 58 33 | 28 54 72 69 61 6e 67 6c |2 = MAX3|(Triangl|
|000030f0| 65 2d 3e 50 31 2e 79 2c | 20 54 72 69 61 6e 67 6c |e->P1.y,| Triangl|
|00003100| 65 2d 3e 50 32 2e 79 2c | 20 54 72 69 61 6e 67 6c |e->P2.y,| Triangl|
|00003110| 65 2d 3e 50 33 2e 79 29 | 3b 0d 20 20 54 33 20 3d |e->P3.y)|;. T3 =|
|00003120| 20 4d 41 58 33 28 54 72 | 69 61 6e 67 6c 65 2d 3e | MAX3(Tr|iangle->|
|00003130| 50 31 2e 7a 2c 20 54 72 | 69 61 6e 67 6c 65 2d 3e |P1.z, Tr|iangle->|
|00003140| 50 32 2e 7a 2c 20 54 72 | 69 61 6e 67 6c 65 2d 3e |P2.z, Tr|iangle->|
|00003150| 50 33 2e 7a 29 3b 0d 20 | 20 4d 61 6b 65 5f 56 65 |P3.z);. | Make_Ve|
|00003160| 63 74 6f 72 28 26 54 72 | 69 61 6e 67 6c 65 2d 3e |ctor(&Tr|iangle->|
|00003170| 42 6f 75 6e 64 73 2e 4c | 65 6e 67 74 68 73 2c 54 |Bounds.L|engths,T|
|00003180| 31 2c 54 32 2c 54 33 29 | 3b 0d 0d 20 20 56 53 75 |1,T2,T3)|;.. VSu|
|00003190| 62 28 54 72 69 61 6e 67 | 6c 65 2d 3e 42 6f 75 6e |b(Triang|le->Boun|
|000031a0| 64 73 2e 4c 65 6e 67 74 | 68 73 2c 20 54 72 69 61 |ds.Lengt|hs, Tria|
|000031b0| 6e 67 6c 65 2d 3e 42 6f | 75 6e 64 73 2e 4c 65 6e |ngle->Bo|unds.Len|
|000031c0| 67 74 68 73 2c 0d 20 20 | 20 20 54 72 69 61 6e 67 |gths,. | Triang|
|000031d0| 6c 65 2d 3e 42 6f 75 6e | 64 73 2e 4c 6f 77 65 72 |le->Boun|ds.Lower|
|000031e0| 5f 4c 65 66 74 29 3b 0d | 20 20 54 72 69 61 6e 67 |_Left);.| Triang|
|000031f0| 6c 65 2d 3e 42 6f 75 6e | 64 73 2e 4c 65 6e 67 74 |le->Boun|ds.Lengt|
|00003200| 68 73 2e 78 20 2b 3d 20 | 45 50 53 49 4c 4f 4e 3b |hs.x += |EPSILON;|
|00003210| 0d 20 20 54 72 69 61 6e | 67 6c 65 2d 3e 42 6f 75 |. Trian|gle->Bou|
|00003220| 6e 64 73 2e 4c 65 6e 67 | 74 68 73 2e 79 20 2b 3d |nds.Leng|ths.y +=|
|00003230| 20 45 50 53 49 4c 4f 4e | 3b 0d 20 20 54 72 69 61 | EPSILON|;. Tria|
|00003240| 6e 67 6c 65 2d 3e 42 6f | 75 6e 64 73 2e 4c 65 6e |ngle->Bo|unds.Len|
|00003250| 67 74 68 73 2e 7a 20 2b | 3d 20 45 50 53 49 4c 4f |gths.z +|= EPSILO|
|00003260| 4e 3b 0d 20 20 7d 0d 0d | 76 6f 69 64 20 54 72 61 |N;. }..|void Tra|
|00003270| 6e 73 66 6f 72 6d 5f 54 | 72 69 61 6e 67 6c 65 20 |nsform_T|riangle |
|00003280| 28 4f 62 6a 65 63 74 2c | 20 54 72 61 6e 73 29 0d |(Object,| Trans).|
|00003290| 4f 42 4a 45 43 54 20 2a | 4f 62 6a 65 63 74 3b 0d |OBJECT *|Object;.|
|000032a0| 54 52 41 4e 53 46 4f 52 | 4d 20 2a 54 72 61 6e 73 |TRANSFOR|M *Trans|
|000032b0| 3b 0d 20 20 7b 0d 20 20 | 54 52 49 41 4e 47 4c 45 |;. {. |TRIANGLE|
|000032c0| 20 2a 54 72 69 61 6e 67 | 6c 65 20 3d 20 28 54 52 | *Triang|le = (TR|
|000032d0| 49 41 4e 47 4c 45 20 2a | 29 20 4f 62 6a 65 63 74 |IANGLE *|) Object|
|000032e0| 3b 0d 0d 20 20 69 66 28 | 54 72 69 61 6e 67 6c 65 |;.. if(|Triangle|
|000032f0| 2d 3e 44 65 67 65 6e 65 | 72 61 74 65 5f 46 6c 61 |->Degene|rate_Fla|
|00003300| 67 29 20 72 65 74 75 72 | 6e 3b 0d 0d 20 20 4d 54 |g) retur|n;.. MT|
|00003310| 72 61 6e 73 50 6f 69 6e | 74 20 28 26 54 72 69 61 |ransPoin|t (&Tria|
|00003320| 6e 67 6c 65 2d 3e 4e 6f | 72 6d 61 6c 5f 56 65 63 |ngle->No|rmal_Vec|
|00003330| 74 6f 72 2c 0d 20 20 20 | 20 26 54 72 69 61 6e 67 |tor,. | &Triang|
|00003340| 6c 65 2d 3e 4e 6f 72 6d | 61 6c 5f 56 65 63 74 6f |le->Norm|al_Vecto|
|00003350| 72 2c 20 54 72 61 6e 73 | 29 3b 0d 20 20 4d 54 72 |r, Trans|);. MTr|
|00003360| 61 6e 73 50 6f 69 6e 74 | 20 28 26 54 72 69 61 6e |ansPoint| (&Trian|
|00003370| 67 6c 65 2d 3e 50 31 2c | 20 26 54 72 69 61 6e 67 |gle->P1,| &Triang|
|00003380| 6c 65 2d 3e 50 31 2c 20 | 54 72 61 6e 73 29 3b 0d |le->P1, |Trans);.|
|00003390| 20 20 4d 54 72 61 6e 73 | 50 6f 69 6e 74 20 28 26 | MTrans|Point (&|
|000033a0| 54 72 69 61 6e 67 6c 65 | 2d 3e 50 32 2c 20 26 54 |Triangle|->P2, &T|
|000033b0| 72 69 61 6e 67 6c 65 2d | 3e 50 32 2c 20 54 72 61 |riangle-|>P2, Tra|
|000033c0| 6e 73 29 3b 0d 20 20 4d | 54 72 61 6e 73 50 6f 69 |ns);. M|TransPoi|
|000033d0| 6e 74 20 28 26 54 72 69 | 61 6e 67 6c 65 2d 3e 50 |nt (&Tri|angle->P|
|000033e0| 33 2c 20 26 54 72 69 61 | 6e 67 6c 65 2d 3e 50 33 |3, &Tria|ngle->P3|
|000033f0| 2c 20 54 72 61 6e 73 29 | 3b 0d 20 20 43 6f 6d 70 |, Trans)|;. Comp|
|00003400| 75 74 65 5f 54 72 69 61 | 6e 67 6c 65 20 28 54 72 |ute_Tria|ngle (Tr|
|00003410| 69 61 6e 67 6c 65 2c 46 | 41 4c 53 45 29 3b 0d 20 |iangle,F|ALSE);. |
|00003420| 20 7d 0d 0d 54 52 49 41 | 4e 47 4c 45 20 2a 43 72 | }..TRIA|NGLE *Cr|
|00003430| 65 61 74 65 5f 54 72 69 | 61 6e 67 6c 65 28 29 0d |eate_Tri|angle().|
|00003440| 20 20 7b 0d 20 20 54 52 | 49 41 4e 47 4c 45 20 2a | {. TR|IANGLE *|
|00003450| 4e 65 77 3b 0d 0d 20 20 | 69 66 20 28 28 4e 65 77 |New;.. |if ((New|
|00003460| 20 3d 20 28 54 52 49 41 | 4e 47 4c 45 20 2a 29 20 | = (TRIA|NGLE *) |
|00003470| 6d 61 6c 6c 6f 63 20 28 | 73 69 7a 65 6f 66 20 28 |malloc (|sizeof (|
|00003480| 54 52 49 41 4e 47 4c 45 | 29 29 29 20 3d 3d 20 4e |TRIANGLE|))) == N|
|00003490| 55 4c 4c 29 0d 20 20 20 | 20 4d 41 45 72 72 6f 72 |ULL). | MAError|
|000034a0| 20 28 22 74 72 69 61 6e | 67 6c 65 22 29 3b 0d 0d | ("trian|gle");..|
|000034b0| 20 20 49 4e 49 54 5f 4f | 42 4a 45 43 54 5f 46 49 | INIT_O|BJECT_FI|
|000034c0| 45 4c 44 53 28 4e 65 77 | 2c 54 52 49 41 4e 47 4c |ELDS(New|,TRIANGL|
|000034d0| 45 5f 4f 42 4a 45 43 54 | 2c 26 54 72 69 61 6e 67 |E_OBJECT|,&Triang|
|000034e0| 6c 65 5f 4d 65 74 68 6f | 64 73 29 0d 0d 20 20 20 |le_Metho|ds).. |
|000034f0| 20 4d 61 6b 65 5f 56 65 | 63 74 6f 72 20 28 26 28 | Make_Ve|ctor (&(|
|00003500| 4e 65 77 20 2d 3e 20 4e | 6f 72 6d 61 6c 5f 56 65 |New -> N|ormal_Ve|
|00003510| 63 74 6f 72 29 2c 20 30 | 2e 30 2c 20 31 2e 30 2c |ctor), 0|.0, 1.0,|
|00003520| 20 30 2e 30 29 3b 0d 20 | 20 4e 65 77 20 2d 3e 20 | 0.0);. | New -> |
|00003530| 44 69 73 74 61 6e 63 65 | 20 3d 20 30 2e 30 3b 0d |Distance| = 0.0;.|
|00003540| 20 20 4e 65 77 20 2d 3e | 20 43 4d 4e 6f 72 6d 44 | New ->| CMNormD|
|00003550| 6f 74 4f 72 69 67 69 6e | 20 3d 20 30 2e 30 3b 0d |otOrigin| = 0.0;.|
|00003560| 20 20 4e 65 77 20 2d 3e | 20 43 4d 43 61 63 68 65 | New ->| CMCache|
|00003570| 64 20 3d 20 46 41 4c 53 | 45 3b 0d 20 20 4d 61 6b |d = FALS|E;. Mak|
|00003580| 65 5f 56 65 63 74 6f 72 | 20 28 26 28 4e 65 77 20 |e_Vector| (&(New |
|00003590| 2d 3e 20 50 31 29 2c 20 | 30 2e 30 2c 20 30 2e 30 |-> P1), |0.0, 0.0|
|000035a0| 2c 20 30 2e 30 29 3b 0d | 20 20 4d 61 6b 65 5f 56 |, 0.0);.| Make_V|
|000035b0| 65 63 74 6f 72 20 28 26 | 28 4e 65 77 20 2d 3e 20 |ector (&|(New -> |
|000035c0| 50 32 29 2c 20 31 2e 30 | 2c 20 30 2e 30 2c 20 30 |P2), 1.0|, 0.0, 0|
|000035d0| 2e 30 29 3b 0d 20 20 4d | 61 6b 65 5f 56 65 63 74 |.0);. M|ake_Vect|
|000035e0| 6f 72 20 28 26 28 4e 65 | 77 20 2d 3e 20 50 33 29 |or (&(Ne|w -> P3)|
|000035f0| 2c 20 30 2e 30 2c 20 31 | 2e 30 2c 20 30 2e 30 29 |, 0.0, 1|.0, 0.0)|
|00003600| 3b 0d 20 20 4e 65 77 20 | 2d 3e 20 44 65 67 65 6e |;. New |-> Degen|
|00003610| 65 72 61 74 65 5f 46 6c | 61 67 20 3d 20 46 41 4c |erate_Fl|ag = FAL|
|00003620| 53 45 3b 0d 0d 20 20 2f | 2a 20 4e 4f 54 45 3a 20 |SE;.. /|* NOTE: |
|00003630| 44 6f 6d 69 6e 61 6e 74 | 5f 41 78 69 73 20 69 73 |Dominant|_Axis is|
|00003640| 20 63 6f 6d 70 75 74 65 | 64 20 77 68 65 6e 20 50 | compute|d when P|
|00003650| 61 72 73 65 5f 54 72 69 | 61 6e 67 6c 65 20 63 61 |arse_Tri|angle ca|
|00003660| 6c 6c 73 0d 20 20 20 43 | 6f 6d 70 75 74 65 5f 54 |lls. C|ompute_T|
|00003670| 72 69 61 6e 67 6c 65 2e | 20 20 76 41 78 69 73 20 |riangle.| vAxis |
|00003680| 69 73 20 75 73 65 64 20 | 6f 6e 6c 79 20 66 6f 72 |is used |only for|
|00003690| 20 73 6d 6f 6f 74 68 20 | 74 72 69 61 6e 67 6c 65 | smooth |triangle|
|000036a0| 73 20 2a 2f 0d 0d 20 20 | 72 65 74 75 72 6e 20 28 |s */.. |return (|
|000036b0| 4e 65 77 29 3b 0d 20 20 | 7d 0d 0d 76 6f 69 64 20 |New);. |}..void |
|000036c0| 49 6e 76 65 72 74 5f 54 | 72 69 61 6e 67 6c 65 20 |Invert_T|riangle |
|000036d0| 28 4f 62 6a 65 63 74 29 | 0d 4f 42 4a 45 43 54 20 |(Object)|.OBJECT |
|000036e0| 2a 4f 62 6a 65 63 74 3b | 0d 20 20 7b 0d 20 20 72 |*Object;|. {. r|
|000036f0| 65 74 75 72 6e 3b 0d 20 | 20 7d 0d 0d 2f 2a 20 43 |eturn;. | }../* C|
|00003700| 61 6c 63 75 6c 61 74 65 | 20 74 68 65 20 50 68 6f |alculate| the Pho|
|00003710| 6e 67 2d 69 6e 74 65 72 | 70 6f 6c 61 74 65 64 20 |ng-inter|polated |
|00003720| 76 65 63 74 6f 72 20 77 | 69 74 68 69 6e 20 74 68 |vector w|ithin th|
|00003730| 65 20 74 72 69 61 6e 67 | 6c 65 0d 20 20 20 61 74 |e triang|le. at|
|00003740| 20 74 68 65 20 67 69 76 | 65 6e 20 69 6e 74 65 72 | the giv|en inter|
|00003750| 73 65 63 74 69 6f 6e 20 | 70 6f 69 6e 74 2e 20 54 |section |point. T|
|00003760| 68 65 20 6d 61 74 68 20 | 66 6f 72 20 74 68 69 73 |he math |for this|
|00003770| 20 69 73 20 61 20 62 69 | 74 0d 20 20 20 62 69 7a | is a bi|t. biz|
|00003780| 61 72 72 65 3a 0d 0d 20 | 20 20 20 2d 20 20 20 20 |arre:.. | - |
|00003790| 20 20 20 20 20 50 31 0d | 20 20 20 20 7c 20 20 20 | P1.| | |
|000037a0| 20 20 20 20 20 2f 7c 5c | 20 5c 0d 20 20 20 20 7c | /|\| \. ||
|000037b0| 20 20 20 20 20 20 20 2f | 20 7c 50 65 72 70 5c 0d | /| |Perp\.|
|000037c0| 20 20 20 20 7c 20 20 20 | 20 20 20 2f 20 20 56 20 | | | / V |
|000037d0| 20 5c 20 20 20 5c 0d 20 | 20 20 20 7c 20 20 20 20 | \ \. | | |
|000037e0| 20 2f 20 20 20 7c 20 20 | 20 20 5c 20 20 20 5c 0d | / | | \ \.|
|000037f0| 20 20 75 20 7c 20 20 20 | 20 2f 5f 5f 5f 5f 7c 5f | u | | /____|_|
|00003800| 5f 5f 5f 5f 50 49 5f 5f | 5f 5c 0d 20 20 20 20 7c |____PI__|_\. ||
|00003810| 20 20 20 2f 20 20 20 20 | 20 7c 20 20 20 20 20 20 | / | | |
|00003820| 20 5c 20 20 20 20 5c 0d | 20 20 20 20 2d 20 20 50 | \ \.| - P|
|00003830| 32 2d 2d 2d 2d 2d 7c 2d | 2d 2d 2d 2d 2d 2d 2d 7c |2-----|-|-------||
|00003840| 2d 2d 2d 2d 50 33 0d 20 | 20 20 20 20 20 20 20 20 |----P3. | |
|00003850| 20 20 20 20 20 50 62 61 | 73 65 20 20 20 20 50 49 | Pba|se PI|
|00003860| 6e 74 65 72 73 65 63 74 | 0d 20 20 20 20 20 20 20 |ntersect|. |
|00003870| 20 7c 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d | |------|--------|
|00003880| 2d 2d 2d 2d 2d 7c 0d 20 | 20 20 20 20 20 20 20 20 |-----|. | |
|00003890| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 76 0d | | v.|
|000038a0| 0d 20 20 20 54 72 69 61 | 6e 67 6c 65 2d 3e 50 65 |. Tria|ngle->Pe|
|000038b0| 72 70 20 69 73 20 61 20 | 75 6e 69 74 20 76 65 63 |rp is a |unit vec|
|000038c0| 74 6f 72 20 66 72 6f 6d | 20 50 31 20 74 6f 20 50 |tor from| P1 to P|
|000038d0| 62 61 73 65 2e 20 57 65 | 20 63 61 6c 63 75 6c 61 |base. We| calcula|
|000038e0| 74 65 0d 0d 20 20 20 75 | 20 3d 20 28 50 49 20 2d |te.. u| = (PI -|
|000038f0| 20 50 31 29 20 44 4f 54 | 20 50 65 72 70 20 2f 20 | P1) DOT| Perp / |
|00003900| 28 28 50 33 20 2d 20 50 | 31 29 20 44 4f 54 20 50 |((P3 - P|1) DOT P|
|00003910| 65 72 70 29 2e 0d 0d 20 | 20 20 57 65 20 74 68 65 |erp)... | We the|
|00003920| 6e 20 63 61 6c 63 75 6c | 61 74 65 20 77 68 65 72 |n calcul|ate wher|
|00003930| 65 20 74 68 65 20 6c 69 | 6e 65 20 66 72 6f 6d 20 |e the li|ne from |
|00003940| 50 31 20 74 6f 20 50 49 | 20 69 6e 74 65 72 73 65 |P1 to PI| interse|
|00003950| 63 74 73 20 74 68 65 20 | 6c 69 6e 65 20 50 32 20 |cts the |line P2 |
|00003960| 74 6f 20 50 33 3a 0d 20 | 20 20 50 49 6e 74 65 72 |to P3:. | PInter|
|00003970| 73 65 63 74 20 3d 20 28 | 50 49 20 2d 20 50 31 29 |sect = (|PI - P1)|
|00003980| 2f 75 2e 0d 0d 20 20 20 | 57 65 20 72 65 61 6c 6c |/u... |We reall|
|00003990| 79 20 6f 6e 6c 79 20 6e | 65 65 64 20 6f 6e 65 20 |y only n|eed one |
|000039a0| 63 6f 6f 72 64 69 6e 61 | 74 65 20 6f 66 20 50 49 |coordina|te of PI|
|000039b0| 6e 74 65 72 73 65 63 74 | 2e 20 20 57 65 20 74 68 |ntersect|. We th|
|000039c0| 65 6e 20 63 61 6c 63 75 | 6c 61 74 65 20 76 20 61 |en calcu|late v a|
|000039d0| 73 3a 0d 0d 20 20 20 20 | 20 20 76 20 3d 20 50 49 |s:.. | v = PI|
|000039e0| 6e 74 65 72 73 65 63 74 | 2e 78 20 2f 20 28 50 33 |ntersect|.x / (P3|
|000039f0| 2e 78 20 2d 20 50 32 2e | 78 29 0d 20 6f 72 20 20 |.x - P2.|x). or |
|00003a00| 20 76 20 3d 20 50 49 6e | 74 65 72 73 65 63 74 2e | v = PIn|tersect.|
|00003a10| 79 20 2f 20 28 50 33 2e | 79 20 2d 20 50 32 2e 79 |y / (P3.|y - P2.y|
|00003a20| 29 0d 20 6f 72 20 20 20 | 76 20 3d 20 50 49 6e 74 |). or |v = PInt|
|00003a30| 65 72 73 65 63 74 2e 7a | 20 2f 20 28 50 33 2e 7a |ersect.z| / (P3.z|
|00003a40| 20 2d 20 50 32 2e 7a 29 | 0d 0d 20 20 20 64 65 70 | - P2.z)|.. dep|
|00003a50| 65 6e 64 69 6e 67 20 6f | 6e 20 77 68 69 63 68 20 |ending o|n which |
|00003a60| 63 61 6c 63 75 6c 61 74 | 69 6f 6e 20 77 69 6c 6c |calculat|ion will|
|00003a70| 20 67 69 76 65 20 75 73 | 20 74 68 65 20 62 65 73 | give us| the bes|
|00003a80| 74 20 61 6e 73 77 65 72 | 73 2e 0d 0d 20 20 20 4f |t answer|s... O|
|00003a90| 6e 63 65 20 77 65 20 68 | 61 76 65 20 75 20 61 6e |nce we h|ave u an|
|00003aa0| 64 20 76 2c 20 77 65 20 | 63 61 6e 20 70 65 72 66 |d v, we |can perf|
|00003ab0| 6f 72 6d 20 74 68 65 20 | 6e 6f 72 6d 61 6c 20 69 |orm the |normal i|
|00003ac0| 6e 74 65 72 70 6f 6c 61 | 74 69 6f 6e 20 61 73 3a |nterpola|tion as:|
|00003ad0| 0d 0d 20 20 20 20 20 4e | 54 65 6d 70 31 20 3d 20 |.. N|Temp1 = |
|00003ae0| 4e 31 20 2b 20 75 28 4e | 32 20 2d 20 4e 31 29 3b |N1 + u(N|2 - N1);|
|00003af0| 0d 20 20 20 20 20 4e 54 | 65 6d 70 32 20 3d 20 4e |. NT|emp2 = N|
|00003b00| 31 20 2b 20 75 28 4e 33 | 20 2d 20 4e 31 29 3b 0d |1 + u(N3| - N1);.|
|00003b10| 20 20 20 20 20 52 65 73 | 75 6c 74 20 3d 20 6e 6f | Res|ult = no|
|00003b20| 72 6d 61 6c 69 7a 65 20 | 28 4e 54 65 6d 70 31 20 |rmalize |(NTemp1 |
|00003b30| 2b 20 76 28 4e 54 65 6d | 70 32 20 2d 20 4e 54 65 |+ v(NTem|p2 - NTe|
|00003b40| 6d 70 31 29 29 0d 0d 20 | 20 20 41 73 20 61 6c 77 |mp1)).. | As alw|
|00003b50| 61 79 73 2c 20 61 6e 79 | 20 76 61 6c 75 65 73 20 |ays, any| values |
|00003b60| 77 68 69 63 68 20 61 72 | 65 20 63 6f 6e 73 74 61 |which ar|e consta|
|00003b70| 6e 74 20 66 6f 72 20 74 | 68 65 20 74 72 69 61 6e |nt for t|he trian|
|00003b80| 67 6c 65 20 61 72 65 20 | 63 61 63 68 65 64 0d 20 |gle are |cached. |
|00003b90| 20 20 69 6e 20 74 68 65 | 20 74 72 69 61 6e 67 6c | in the| triangl|
|00003ba0| 65 2e 0d 2a 2f 0d 0d 76 | 6f 69 64 20 53 6d 6f 6f |e..*/..v|oid Smoo|
|00003bb0| 74 68 5f 54 72 69 61 6e | 67 6c 65 5f 4e 6f 72 6d |th_Trian|gle_Norm|
|00003bc0| 61 6c 20 28 52 65 73 75 | 6c 74 2c 20 4f 62 6a 65 |al (Resu|lt, Obje|
|00003bd0| 63 74 2c 20 49 50 6f 69 | 6e 74 29 0d 4f 42 4a 45 |ct, IPoi|nt).OBJE|
|00003be0| 43 54 20 2a 4f 62 6a 65 | 63 74 3b 0d 56 45 43 54 |CT *Obje|ct;.VECT|
|00003bf0| 4f 52 20 2a 52 65 73 75 | 6c 74 2c 20 2a 49 50 6f |OR *Resu|lt, *IPo|
|00003c00| 69 6e 74 3b 0d 20 20 7b | 0d 20 20 53 4d 4f 4f 54 |int;. {|. SMOOT|
|00003c10| 48 5f 54 52 49 41 4e 47 | 4c 45 20 2a 54 72 69 61 |H_TRIANG|LE *Tria|
|00003c20| 6e 67 6c 65 20 3d 20 28 | 53 4d 4f 4f 54 48 5f 54 |ngle = (|SMOOTH_T|
|00003c30| 52 49 41 4e 47 4c 45 20 | 2a 29 20 4f 62 6a 65 63 |RIANGLE |*) Objec|
|00003c40| 74 3b 0d 20 20 56 45 43 | 54 4f 52 20 50 49 4d 69 |t;. VEC|TOR PIMi|
|00003c50| 6e 75 73 50 31 2c 20 4e | 54 65 6d 70 31 2c 20 4e |nusP1, N|Temp1, N|
|00003c60| 54 65 6d 70 32 3b 0d 20 | 20 44 42 4c 20 75 20 3d |Temp2;. | DBL u =|
|00003c70| 20 30 2e 30 2c 20 76 20 | 3d 20 30 2e 30 3b 0d 0d | 0.0, v |= 0.0;..|
|00003c80| 20 20 56 53 75 62 20 28 | 50 49 4d 69 6e 75 73 50 | VSub (|PIMinusP|
|00003c90| 31 2c 20 2a 49 50 6f 69 | 6e 74 2c 20 54 72 69 61 |1, *IPoi|nt, Tria|
|00003ca0| 6e 67 6c 65 2d 3e 50 31 | 29 3b 0d 20 20 56 44 6f |ngle->P1|);. VDo|
|00003cb0| 74 20 28 75 2c 20 50 49 | 4d 69 6e 75 73 50 31 2c |t (u, PI|MinusP1,|
|00003cc0| 20 54 72 69 61 6e 67 6c | 65 2d 3e 50 65 72 70 29 | Triangl|e->Perp)|
|00003cd0| 3b 0d 20 20 69 66 20 28 | 75 20 3c 20 31 2e 30 65 |;. if (|u < 1.0e|
|00003ce0| 2d 39 29 20 0d 20 20 20 | 20 7b 0d 20 20 20 20 2a |-9) . | {. *|
|00003cf0| 52 65 73 75 6c 74 20 3d | 20 54 72 69 61 6e 67 6c |Result =| Triangl|
|00003d00| 65 2d 3e 4e 31 3b 0d 20 | 20 20 20 72 65 74 75 72 |e->N1;. | retur|
|00003d10| 6e 3b 0d 20 20 20 20 7d | 0d 0d 20 20 2f 2a 20 42 |n;. }|.. /* B|
|00003d20| 61 73 65 44 65 6c 74 61 | 20 63 6f 6e 74 61 69 6e |aseDelta| contain|
|00003d30| 73 20 50 33 2e 78 2d 50 | 32 2e 78 2c 20 20 50 33 |s P3.x-P|2.x, P3|
|00003d40| 2e 79 2d 50 32 2e 79 2c | 20 6f 72 20 50 33 2e 7a |.y-P2.y,| or P3.z|
|00003d50| 2d 50 32 2e 7a 20 64 65 | 70 65 6e 64 69 6e 67 20 |-P2.z de|pending |
|00003d60| 6f 6e 20 74 68 65 0d 20 | 20 20 20 20 20 76 61 6c |on the. | val|
|00003d70| 75 65 20 6f 66 20 76 41 | 78 69 73 2e 20 2a 2f 0d |ue of vA|xis. */.|
|00003d80| 0d 20 20 73 77 69 74 63 | 68 20 28 54 72 69 61 6e |. switc|h (Trian|
|00003d90| 67 6c 65 2d 3e 76 41 78 | 69 73 29 20 0d 20 20 7b |gle->vAx|is) . {|
|00003da0| 0d 20 20 63 61 73 65 20 | 58 5f 41 58 49 53 3a 20 |. case |X_AXIS: |
|00003db0| 20 0d 20 20 20 20 76 20 | 3d 20 28 50 49 4d 69 6e | . v |= (PIMin|
|00003dc0| 75 73 50 31 2e 78 2f 75 | 20 2b 20 54 72 69 61 6e |usP1.x/u| + Trian|
|00003dd0| 67 6c 65 2d 3e 50 31 2e | 78 20 2d 20 54 72 69 61 |gle->P1.|x - Tria|
|00003de0| 6e 67 6c 65 2d 3e 50 32 | 2e 78 29 20 2f 20 54 72 |ngle->P2|.x) / Tr|
|00003df0| 69 61 6e 67 6c 65 2d 3e | 42 61 73 65 44 65 6c 74 |iangle->|BaseDelt|
|00003e00| 61 3b 0d 20 20 20 20 62 | 72 65 61 6b 3b 0d 0d 20 |a;. b|reak;.. |
|00003e10| 20 63 61 73 65 20 59 5f | 41 58 49 53 3a 20 20 0d | case Y_|AXIS: .|
|00003e20| 20 20 20 20 76 20 3d 20 | 28 50 49 4d 69 6e 75 73 | v = |(PIMinus|
|00003e30| 50 31 2e 79 2f 75 20 2b | 20 54 72 69 61 6e 67 6c |P1.y/u +| Triangl|
|00003e40| 65 2d 3e 50 31 2e 79 20 | 2d 20 54 72 69 61 6e 67 |e->P1.y |- Triang|
|00003e50| 6c 65 2d 3e 50 32 2e 79 | 29 20 2f 20 54 72 69 61 |le->P2.y|) / Tria|
|00003e60| 6e 67 6c 65 2d 3e 42 61 | 73 65 44 65 6c 74 61 3b |ngle->Ba|seDelta;|
|00003e70| 0d 20 20 20 20 62 72 65 | 61 6b 3b 0d 0d 20 20 63 |. bre|ak;.. c|
|00003e80| 61 73 65 20 5a 5f 41 58 | 49 53 3a 20 20 0d 20 20 |ase Z_AX|IS: . |
|00003e90| 20 20 76 20 3d 20 28 50 | 49 4d 69 6e 75 73 50 31 | v = (P|IMinusP1|
|00003ea0| 2e 7a 2f 75 20 2b 20 54 | 72 69 61 6e 67 6c 65 2d |.z/u + T|riangle-|
|00003eb0| 3e 50 31 2e 7a 20 2d 20 | 54 72 69 61 6e 67 6c 65 |>P1.z - |Triangle|
|00003ec0| 2d 3e 50 32 2e 7a 29 2f | 20 54 72 69 61 6e 67 6c |->P2.z)/| Triangl|
|00003ed0| 65 2d 3e 42 61 73 65 44 | 65 6c 74 61 3b 0d 20 20 |e->BaseD|elta;. |
|00003ee0| 20 20 62 72 65 61 6b 3b | 0d 20 20 7d 0d 0d 20 20 | break;|. }.. |
|00003ef0| 56 53 75 62 20 28 4e 54 | 65 6d 70 31 2c 20 54 72 |VSub (NT|emp1, Tr|
|00003f00| 69 61 6e 67 6c 65 2d 3e | 4e 32 2c 20 54 72 69 61 |iangle->|N2, Tria|
|00003f10| 6e 67 6c 65 2d 3e 4e 31 | 29 3b 0d 20 20 56 53 63 |ngle->N1|);. VSc|
|00003f20| 61 6c 65 45 71 20 28 4e | 54 65 6d 70 31 2c 20 75 |aleEq (N|Temp1, u|
|00003f30| 29 3b 0d 20 20 56 41 64 | 64 45 71 20 28 4e 54 65 |);. VAd|dEq (NTe|
|00003f40| 6d 70 31 2c 20 54 72 69 | 61 6e 67 6c 65 2d 3e 4e |mp1, Tri|angle->N|
|00003f50| 31 29 3b 0d 20 20 56 53 | 75 62 20 28 4e 54 65 6d |1);. VS|ub (NTem|
|00003f60| 70 32 2c 20 54 72 69 61 | 6e 67 6c 65 2d 3e 4e 33 |p2, Tria|ngle->N3|
|00003f70| 2c 20 54 72 69 61 6e 67 | 6c 65 2d 3e 4e 31 29 3b |, Triang|le->N1);|
|00003f80| 0d 20 20 56 53 63 61 6c | 65 45 71 20 28 4e 54 65 |. VScal|eEq (NTe|
|00003f90| 6d 70 32 2c 20 75 29 3b | 0d 20 20 56 41 64 64 45 |mp2, u);|. VAddE|
|00003fa0| 71 20 28 4e 54 65 6d 70 | 32 2c 20 54 72 69 61 6e |q (NTemp|2, Trian|
|00003fb0| 67 6c 65 2d 3e 4e 31 29 | 3b 0d 20 20 56 53 75 62 |gle->N1)|;. VSub|
|00003fc0| 20 28 2a 52 65 73 75 6c | 74 2c 20 4e 54 65 6d 70 | (*Resul|t, NTemp|
|00003fd0| 32 2c 20 4e 54 65 6d 70 | 31 29 3b 0d 20 20 56 53 |2, NTemp|1);. VS|
|00003fe0| 63 61 6c 65 45 71 20 28 | 2a 52 65 73 75 6c 74 2c |caleEq (|*Result,|
|00003ff0| 20 76 29 3b 0d 20 20 56 | 41 64 64 45 71 20 28 2a | v);. V|AddEq (*|
|00004000| 52 65 73 75 6c 74 2c 20 | 4e 54 65 6d 70 31 29 3b |Result, |NTemp1);|
|00004010| 20 0d 20 20 56 4e 6f 72 | 6d 61 6c 69 7a 65 20 28 | . VNor|malize (|
|00004020| 2a 52 65 73 75 6c 74 2c | 20 2a 52 65 73 75 6c 74 |*Result,| *Result|
|00004030| 29 3b 0d 20 20 7d 0d 0d | 76 6f 69 64 20 2a 43 6f |);. }..|void *Co|
|00004040| 70 79 5f 53 6d 6f 6f 74 | 68 5f 54 72 69 61 6e 67 |py_Smoot|h_Triang|
|00004050| 6c 65 20 28 4f 62 6a 65 | 63 74 29 0d 4f 42 4a 45 |le (Obje|ct).OBJE|
|00004060| 43 54 20 2a 4f 62 6a 65 | 63 74 3b 0d 20 20 7b 0d |CT *Obje|ct;. {.|
|00004070| 20 20 53 4d 4f 4f 54 48 | 5f 54 52 49 41 4e 47 4c | SMOOTH|_TRIANGL|
|00004080| 45 20 2a 4e 65 77 3b 0d | 0d 20 20 4e 65 77 20 3d |E *New;.|. New =|
|00004090| 20 43 72 65 61 74 65 5f | 53 6d 6f 6f 74 68 5f 54 | Create_|Smooth_T|
|000040a0| 72 69 61 6e 67 6c 65 20 | 28 29 3b 0d 20 20 2a 4e |riangle |();. *N|
|000040b0| 65 77 20 3d 20 2a 20 28 | 28 53 4d 4f 4f 54 48 5f |ew = * (|(SMOOTH_|
|000040c0| 54 52 49 41 4e 47 4c 45 | 20 2a 29 4f 62 6a 65 63 |TRIANGLE| *)Objec|
|000040d0| 74 29 3b 0d 0d 20 20 72 | 65 74 75 72 6e 20 28 4e |t);.. r|eturn (N|
|000040e0| 65 77 29 3b 0d 20 20 7d | 0d 0d 76 6f 69 64 20 54 |ew);. }|..void T|
|000040f0| 72 61 6e 73 6c 61 74 65 | 5f 53 6d 6f 6f 74 68 5f |ranslate|_Smooth_|
|00004100| 54 72 69 61 6e 67 6c 65 | 20 28 4f 62 6a 65 63 74 |Triangle| (Object|
|00004110| 2c 20 56 65 63 74 6f 72 | 29 0d 4f 42 4a 45 43 54 |, Vector|).OBJECT|
|00004120| 20 2a 4f 62 6a 65 63 74 | 3b 0d 56 45 43 54 4f 52 | *Object|;.VECTOR|
|00004130| 20 2a 56 65 63 74 6f 72 | 3b 0d 20 20 7b 0d 20 20 | *Vector|;. {. |
|00004140| 53 4d 4f 4f 54 48 5f 54 | 52 49 41 4e 47 4c 45 20 |SMOOTH_T|RIANGLE |
|00004150| 2a 54 72 69 61 6e 67 6c | 65 20 3d 20 28 53 4d 4f |*Triangl|e = (SMO|
|00004160| 4f 54 48 5f 54 52 49 41 | 4e 47 4c 45 20 2a 29 20 |OTH_TRIA|NGLE *) |
|00004170| 4f 62 6a 65 63 74 3b 0d | 20 20 56 45 43 54 4f 52 |Object;.| VECTOR|
|00004180| 20 54 72 61 6e 73 6c 61 | 74 69 6f 6e 3b 0d 0d 20 | Transla|tion;.. |
|00004190| 20 69 66 28 54 72 69 61 | 6e 67 6c 65 2d 3e 44 65 | if(Tria|ngle->De|
|000041a0| 67 65 6e 65 72 61 74 65 | 5f 46 6c 61 67 29 20 72 |generate|_Flag) r|
|000041b0| 65 74 75 72 6e 3b 0d 0d | 20 20 56 45 76 61 6c 75 |eturn;..| VEvalu|
|000041c0| 61 74 65 20 28 54 72 61 | 6e 73 6c 61 74 69 6f 6e |ate (Tra|nslation|
|000041d0| 2c 20 54 72 69 61 6e 67 | 6c 65 2d 3e 4e 6f 72 6d |, Triang|le->Norm|
|000041e0| 61 6c 5f 56 65 63 74 6f | 72 2c 20 2a 56 65 63 74 |al_Vecto|r, *Vect|
|000041f0| 6f 72 29 3b 0d 20 20 54 | 72 69 61 6e 67 6c 65 2d |or);. T|riangle-|
|00004200| 3e 44 69 73 74 61 6e 63 | 65 20 2d 3d 20 54 72 61 |>Distanc|e -= Tra|
|00004210| 6e 73 6c 61 74 69 6f 6e | 2e 78 20 2b 20 54 72 61 |nslation|.x + Tra|
|00004220| 6e 73 6c 61 74 69 6f 6e | 2e 79 20 2b 20 54 72 61 |nslation|.y + Tra|
|00004230| 6e 73 6c 61 74 69 6f 6e | 2e 7a 3b 0d 20 20 56 41 |nslation|.z;. VA|
|00004240| 64 64 45 71 20 28 54 72 | 69 61 6e 67 6c 65 2d 3e |ddEq (Tr|iangle->|
|00004250| 50 31 2c 20 2a 56 65 63 | 74 6f 72 29 0d 20 20 20 |P1, *Vec|tor). |
|00004260| 20 56 41 64 64 45 71 20 | 28 54 72 69 61 6e 67 6c | VAddEq |(Triangl|
|00004270| 65 2d 3e 50 32 2c 20 2a | 56 65 63 74 6f 72 29 0d |e->P2, *|Vector).|
|00004280| 20 20 20 20 20 20 56 41 | 64 64 45 71 20 28 54 72 | VA|ddEq (Tr|
|00004290| 69 61 6e 67 6c 65 2d 3e | 50 33 2c 20 2a 56 65 63 |iangle->|P3, *Vec|
|000042a0| 74 6f 72 29 0d 20 20 20 | 20 20 20 20 20 43 6f 6d |tor). | Com|
|000042b0| 70 75 74 65 5f 54 72 69 | 61 6e 67 6c 65 20 28 28 |pute_Tri|angle ((|
|000042c0| 54 52 49 41 4e 47 4c 45 | 20 2a 29 20 54 72 69 61 |TRIANGLE| *) Tria|
|000042d0| 6e 67 6c 65 2c 54 52 55 | 45 29 3b 0d 20 20 7d 0d |ngle,TRU|E);. }.|
|000042e0| 0d 76 6f 69 64 20 52 6f | 74 61 74 65 5f 53 6d 6f |.void Ro|tate_Smo|
|000042f0| 6f 74 68 5f 54 72 69 61 | 6e 67 6c 65 20 28 4f 62 |oth_Tria|ngle (Ob|
|00004300| 6a 65 63 74 2c 20 56 65 | 63 74 6f 72 29 0d 4f 42 |ject, Ve|ctor).OB|
|00004310| 4a 45 43 54 20 2a 4f 62 | 6a 65 63 74 3b 0d 56 45 |JECT *Ob|ject;.VE|
|00004320| 43 54 4f 52 20 2a 56 65 | 63 74 6f 72 3b 0d 20 20 |CTOR *Ve|ctor;. |
|00004330| 7b 0d 20 20 54 52 41 4e | 53 46 4f 52 4d 20 54 72 |{. TRAN|SFORM Tr|
|00004340| 61 6e 73 3b 0d 0d 20 20 | 69 66 28 28 28 53 4d 4f |ans;.. |if(((SMO|
|00004350| 4f 54 48 5f 54 52 49 41 | 4e 47 4c 45 20 2a 29 4f |OTH_TRIA|NGLE *)O|
|00004360| 62 6a 65 63 74 29 2d 3e | 44 65 67 65 6e 65 72 61 |bject)->|Degenera|
|00004370| 74 65 5f 46 6c 61 67 29 | 20 72 65 74 75 72 6e 3b |te_Flag)| return;|
|00004380| 0d 0d 20 20 43 6f 6d 70 | 75 74 65 5f 52 6f 74 61 |.. Comp|ute_Rota|
|00004390| 74 69 6f 6e 5f 54 72 61 | 6e 73 66 6f 72 6d 20 28 |tion_Tra|nsform (|
|000043a0| 26 54 72 61 6e 73 2c 20 | 56 65 63 74 6f 72 29 3b |&Trans, |Vector);|
|000043b0| 0d 20 20 54 72 61 6e 73 | 66 6f 72 6d 5f 53 6d 6f |. Trans|form_Smo|
|000043c0| 6f 74 68 5f 54 72 69 61 | 6e 67 6c 65 20 28 4f 62 |oth_Tria|ngle (Ob|
|000043d0| 6a 65 63 74 2c 20 26 54 | 72 61 6e 73 29 3b 0d 20 |ject, &T|rans);. |
|000043e0| 20 7d 0d 0d 76 6f 69 64 | 20 53 63 61 6c 65 5f 53 | }..void| Scale_S|
|000043f0| 6d 6f 6f 74 68 5f 54 72 | 69 61 6e 67 6c 65 20 28 |mooth_Tr|iangle (|
|00004400| 4f 62 6a 65 63 74 2c 20 | 56 65 63 74 6f 72 29 0d |Object, |Vector).|
|00004410| 4f 42 4a 45 43 54 20 2a | 4f 62 6a 65 63 74 3b 0d |OBJECT *|Object;.|
|00004420| 56 45 43 54 4f 52 20 2a | 56 65 63 74 6f 72 3b 0d |VECTOR *|Vector;.|
|00004430| 20 20 7b 0d 20 20 53 4d | 4f 4f 54 48 5f 54 52 49 | {. SM|OOTH_TRI|
|00004440| 41 4e 47 4c 45 20 2a 54 | 72 69 61 6e 67 6c 65 20 |ANGLE *T|riangle |
|00004450| 3d 20 28 53 4d 4f 4f 54 | 48 5f 54 52 49 41 4e 47 |= (SMOOT|H_TRIANG|
|00004460| 4c 45 20 2a 29 20 4f 62 | 6a 65 63 74 3b 0d 20 20 |LE *) Ob|ject;. |
|00004470| 44 42 4c 20 4c 65 6e 67 | 74 68 3b 0d 0d 20 20 69 |DBL Leng|th;.. i|
|00004480| 66 28 54 72 69 61 6e 67 | 6c 65 2d 3e 44 65 67 65 |f(Triang|le->Dege|
|00004490| 6e 65 72 61 74 65 5f 46 | 6c 61 67 29 20 72 65 74 |nerate_F|lag) ret|
|000044a0| 75 72 6e 3b 0d 0d 20 20 | 54 72 69 61 6e 67 6c 65 |urn;.. |Triangle|
|000044b0| 2d 3e 4e 6f 72 6d 61 6c | 5f 56 65 63 74 6f 72 2e |->Normal|_Vector.|
|000044c0| 78 20 3d 20 54 72 69 61 | 6e 67 6c 65 2d 3e 4e 6f |x = Tria|ngle->No|
|000044d0| 72 6d 61 6c 5f 56 65 63 | 74 6f 72 2e 78 20 2f 20 |rmal_Vec|tor.x / |
|000044e0| 56 65 63 74 6f 72 2d 3e | 78 3b 0d 20 20 54 72 69 |Vector->|x;. Tri|
|000044f0| 61 6e 67 6c 65 2d 3e 4e | 6f 72 6d 61 6c 5f 56 65 |angle->N|ormal_Ve|
|00004500| 63 74 6f 72 2e 79 20 3d | 20 54 72 69 61 6e 67 6c |ctor.y =| Triangl|
|00004510| 65 2d 3e 4e 6f 72 6d 61 | 6c 5f 56 65 63 74 6f 72 |e->Norma|l_Vector|
|00004520| 2e 79 20 2f 20 56 65 63 | 74 6f 72 2d 3e 79 3b 0d |.y / Vec|tor->y;.|
|00004530| 20 20 54 72 69 61 6e 67 | 6c 65 2d 3e 4e 6f 72 6d | Triang|le->Norm|
|00004540| 61 6c 5f 56 65 63 74 6f | 72 2e 7a 20 3d 20 54 72 |al_Vecto|r.z = Tr|
|00004550| 69 61 6e 67 6c 65 2d 3e | 4e 6f 72 6d 61 6c 5f 56 |iangle->|Normal_V|
|00004560| 65 63 74 6f 72 2e 7a 20 | 2f 20 56 65 63 74 6f 72 |ector.z |/ Vector|
|00004570| 2d 3e 7a 3b 0d 0d 20 20 | 56 4c 65 6e 67 74 68 28 |->z;.. |VLength(|
|00004580| 4c 65 6e 67 74 68 2c 20 | 54 72 69 61 6e 67 6c 65 |Length, |Triangle|
|00004590| 2d 3e 4e 6f 72 6d 61 6c | 5f 56 65 63 74 6f 72 29 |->Normal|_Vector)|
|000045a0| 3b 0d 20 20 56 53 63 61 | 6c 65 45 71 20 28 54 72 |;. VSca|leEq (Tr|
|000045b0| 69 61 6e 67 6c 65 2d 3e | 4e 6f 72 6d 61 6c 5f 56 |iangle->|Normal_V|
|000045c0| 65 63 74 6f 72 2c 20 31 | 2e 30 20 2f 20 4c 65 6e |ector, 1|.0 / Len|
|000045d0| 67 74 68 29 3b 0d 20 20 | 54 72 69 61 6e 67 6c 65 |gth);. |Triangle|
|000045e0| 2d 3e 44 69 73 74 61 6e | 63 65 20 2f 3d 20 4c 65 |->Distan|ce /= Le|
|000045f0| 6e 67 74 68 3b 0d 0d 20 | 20 56 45 76 61 6c 75 61 |ngth;.. | VEvalua|
|00004600| 74 65 45 71 20 28 54 72 | 69 61 6e 67 6c 65 2d 3e |teEq (Tr|iangle->|
|00004610| 50 31 2c 20 2a 56 65 63 | 74 6f 72 29 3b 0d 20 20 |P1, *Vec|tor);. |
|00004620| 56 45 76 61 6c 75 61 74 | 65 45 71 20 28 54 72 69 |VEvaluat|eEq (Tri|
|00004630| 61 6e 67 6c 65 2d 3e 50 | 32 2c 20 2a 56 65 63 74 |angle->P|2, *Vect|
|00004640| 6f 72 29 3b 0d 20 20 56 | 45 76 61 6c 75 61 74 65 |or);. V|Evaluate|
|00004650| 45 71 20 28 54 72 69 61 | 6e 67 6c 65 2d 3e 50 33 |Eq (Tria|ngle->P3|
|00004660| 2c 20 2a 56 65 63 74 6f | 72 29 3b 0d 20 20 43 6f |, *Vecto|r);. Co|
|00004670| 6d 70 75 74 65 5f 54 72 | 69 61 6e 67 6c 65 20 28 |mpute_Tr|iangle (|
|00004680| 28 54 52 49 41 4e 47 4c | 45 20 2a 29 20 54 72 69 |(TRIANGL|E *) Tri|
|00004690| 61 6e 67 6c 65 2c 54 52 | 55 45 29 3b 0d 20 20 7d |angle,TR|UE);. }|
|000046a0| 0d 0d 76 6f 69 64 20 54 | 72 61 6e 73 66 6f 72 6d |..void T|ransform|
|000046b0| 5f 53 6d 6f 6f 74 68 5f | 54 72 69 61 6e 67 6c 65 |_Smooth_|Triangle|
|000046c0| 20 28 4f 62 6a 65 63 74 | 2c 20 54 72 61 6e 73 29 | (Object|, Trans)|
|000046d0| 0d 4f 42 4a 45 43 54 20 | 2a 4f 62 6a 65 63 74 3b |.OBJECT |*Object;|
|000046e0| 0d 54 52 41 4e 53 46 4f | 52 4d 20 2a 54 72 61 6e |.TRANSFO|RM *Tran|
|000046f0| 73 3b 0d 20 20 7b 0d 20 | 20 53 4d 4f 4f 54 48 5f |s;. {. | SMOOTH_|
|00004700| 54 52 49 41 4e 47 4c 45 | 20 2a 54 72 69 61 6e 67 |TRIANGLE| *Triang|
|00004710| 6c 65 20 3d 20 28 53 4d | 4f 4f 54 48 5f 54 52 49 |le = (SM|OOTH_TRI|
|00004720| 41 4e 47 4c 45 20 2a 29 | 20 4f 62 6a 65 63 74 3b |ANGLE *)| Object;|
|00004730| 0d 0d 20 20 69 66 28 54 | 72 69 61 6e 67 6c 65 2d |.. if(T|riangle-|
|00004740| 3e 44 65 67 65 6e 65 72 | 61 74 65 5f 46 6c 61 67 |>Degener|ate_Flag|
|00004750| 29 20 72 65 74 75 72 6e | 3b 0d 0d 20 20 4d 54 72 |) return|;.. MTr|
|00004760| 61 6e 73 50 6f 69 6e 74 | 20 28 26 54 72 69 61 6e |ansPoint| (&Trian|
|00004770| 67 6c 65 2d 3e 4e 6f 72 | 6d 61 6c 5f 56 65 63 74 |gle->Nor|mal_Vect|
|00004780| 6f 72 2c 0d 20 20 20 20 | 26 54 72 69 61 6e 67 6c |or,. |&Triangl|
|00004790| 65 2d 3e 4e 6f 72 6d 61 | 6c 5f 56 65 63 74 6f 72 |e->Norma|l_Vector|
|000047a0| 2c 20 54 72 61 6e 73 29 | 3b 0d 20 20 4d 54 72 61 |, Trans)|;. MTra|
|000047b0| 6e 73 50 6f 69 6e 74 20 | 28 26 54 72 69 61 6e 67 |nsPoint |(&Triang|
|000047c0| 6c 65 2d 3e 50 31 2c 20 | 26 54 72 69 61 6e 67 6c |le->P1, |&Triangl|
|000047d0| 65 2d 3e 50 31 2c 20 54 | 72 61 6e 73 29 3b 0d 20 |e->P1, T|rans);. |
|000047e0| 20 4d 54 72 61 6e 73 50 | 6f 69 6e 74 20 28 26 54 | MTransP|oint (&T|
|000047f0| 72 69 61 6e 67 6c 65 2d | 3e 50 32 2c 20 26 54 72 |riangle-|>P2, &Tr|
|00004800| 69 61 6e 67 6c 65 2d 3e | 50 32 2c 20 54 72 61 6e |iangle->|P2, Tran|
|00004810| 73 29 3b 0d 20 20 4d 54 | 72 61 6e 73 50 6f 69 6e |s);. MT|ransPoin|
|00004820| 74 20 28 26 54 72 69 61 | 6e 67 6c 65 2d 3e 50 33 |t (&Tria|ngle->P3|
|00004830| 2c 20 26 54 72 69 61 6e | 67 6c 65 2d 3e 50 33 2c |, &Trian|gle->P3,|
|00004840| 20 54 72 61 6e 73 29 3b | 0d 20 20 4d 54 72 61 6e | Trans);|. MTran|
|00004850| 73 50 6f 69 6e 74 20 28 | 26 54 72 69 61 6e 67 6c |sPoint (|&Triangl|
|00004860| 65 2d 3e 4e 31 2c 20 26 | 54 72 69 61 6e 67 6c 65 |e->N1, &|Triangle|
|00004870| 2d 3e 4e 31 2c 20 54 72 | 61 6e 73 29 3b 0d 20 20 |->N1, Tr|ans);. |
|00004880| 4d 54 72 61 6e 73 50 6f | 69 6e 74 20 28 26 54 72 |MTransPo|int (&Tr|
|00004890| 69 61 6e 67 6c 65 2d 3e | 4e 32 2c 20 26 54 72 69 |iangle->|N2, &Tri|
|000048a0| 61 6e 67 6c 65 2d 3e 4e | 32 2c 20 54 72 61 6e 73 |angle->N|2, Trans|
|000048b0| 29 3b 0d 20 20 4d 54 72 | 61 6e 73 50 6f 69 6e 74 |);. MTr|ansPoint|
|000048c0| 20 28 26 54 72 69 61 6e | 67 6c 65 2d 3e 4e 33 2c | (&Trian|gle->N3,|
|000048d0| 20 26 54 72 69 61 6e 67 | 6c 65 2d 3e 4e 33 2c 20 | &Triang|le->N3, |
|000048e0| 54 72 61 6e 73 29 3b 0d | 20 20 43 6f 6d 70 75 74 |Trans);.| Comput|
|000048f0| 65 5f 54 72 69 61 6e 67 | 6c 65 20 28 28 54 52 49 |e_Triang|le ((TRI|
|00004900| 41 4e 47 4c 45 20 2a 29 | 20 54 72 69 61 6e 67 6c |ANGLE *)| Triangl|
|00004910| 65 2c 54 52 55 45 29 3b | 0d 20 20 7d 0d 0d 76 6f |e,TRUE);|. }..vo|
|00004920| 69 64 20 49 6e 76 65 72 | 74 5f 53 6d 6f 6f 74 68 |id Inver|t_Smooth|
|00004930| 5f 54 72 69 61 6e 67 6c | 65 20 28 4f 62 6a 65 63 |_Triangl|e (Objec|
|00004940| 74 29 0d 4f 42 4a 45 43 | 54 20 2a 4f 62 6a 65 63 |t).OBJEC|T *Objec|
|00004950| 74 3b 0d 20 20 7b 0d 20 | 20 72 65 74 75 72 6e 3b |t;. {. | return;|
|00004960| 0d 20 20 7d 0d 0d 53 4d | 4f 4f 54 48 5f 54 52 49 |. }..SM|OOTH_TRI|
|00004970| 41 4e 47 4c 45 20 2a 43 | 72 65 61 74 65 5f 53 6d |ANGLE *C|reate_Sm|
|00004980| 6f 6f 74 68 5f 54 72 69 | 61 6e 67 6c 65 28 29 0d |ooth_Tri|angle().|
|00004990| 20 20 7b 0d 20 20 53 4d | 4f 4f 54 48 5f 54 52 49 | {. SM|OOTH_TRI|
|000049a0| 41 4e 47 4c 45 20 2a 4e | 65 77 3b 0d 0d 20 20 69 |ANGLE *N|ew;.. i|
|000049b0| 66 20 28 28 4e 65 77 20 | 3d 20 28 53 4d 4f 4f 54 |f ((New |= (SMOOT|
|000049c0| 48 5f 54 52 49 41 4e 47 | 4c 45 20 2a 29 20 6d 61 |H_TRIANG|LE *) ma|
|000049d0| 6c 6c 6f 63 20 28 73 69 | 7a 65 6f 66 20 28 53 4d |lloc (si|zeof (SM|
|000049e0| 4f 4f 54 48 5f 54 52 49 | 41 4e 47 4c 45 29 29 29 |OOTH_TRI|ANGLE)))|
|000049f0| 20 3d 3d 20 4e 55 4c 4c | 29 0d 20 20 20 20 4d 41 | == NULL|). MA|
|00004a00| 45 72 72 6f 72 20 28 22 | 73 6d 6f 6f 74 68 20 74 |Error ("|smooth t|
|00004a10| 72 69 61 6e 67 6c 65 22 | 29 3b 0d 0d 20 20 49 4e |riangle"|);.. IN|
|00004a20| 49 54 5f 4f 42 4a 45 43 | 54 5f 46 49 45 4c 44 53 |IT_OBJEC|T_FIELDS|
|00004a30| 28 4e 65 77 2c 53 4d 4f | 4f 54 48 5f 54 52 49 41 |(New,SMO|OTH_TRIA|
|00004a40| 4e 47 4c 45 5f 4f 42 4a | 45 43 54 2c 26 53 6d 6f |NGLE_OBJ|ECT,&Smo|
|00004a50| 6f 74 68 5f 54 72 69 61 | 6e 67 6c 65 5f 4d 65 74 |oth_Tria|ngle_Met|
|00004a60| 68 6f 64 73 29 0d 0d 20 | 20 20 20 4d 61 6b 65 5f |hods).. | Make_|
|00004a70| 56 65 63 74 6f 72 20 28 | 26 28 4e 65 77 2d 3e 4e |Vector (|&(New->N|
|00004a80| 6f 72 6d 61 6c 5f 56 65 | 63 74 6f 72 29 2c 20 30 |ormal_Ve|ctor), 0|
|00004a90| 2e 30 2c 20 31 2e 30 2c | 20 30 2e 30 29 3b 0d 20 |.0, 1.0,| 0.0);. |
|00004aa0| 20 4e 65 77 2d 3e 44 69 | 73 74 61 6e 63 65 20 3d | New->Di|stance =|
|00004ab0| 20 30 2e 30 3b 0d 20 20 | 4e 65 77 20 2d 3e 20 43 | 0.0;. |New -> C|
|00004ac0| 4d 4e 6f 72 6d 44 6f 74 | 4f 72 69 67 69 6e 20 3d |MNormDot|Origin =|
|00004ad0| 20 30 2e 30 3b 0d 20 20 | 4e 65 77 20 2d 3e 20 43 | 0.0;. |New -> C|
|00004ae0| 4d 43 61 63 68 65 64 20 | 3d 20 46 41 4c 53 45 3b |MCached |= FALSE;|
|00004af0| 0d 20 20 4d 61 6b 65 5f | 56 65 63 74 6f 72 20 28 |. Make_|Vector (|
|00004b00| 26 28 4e 65 77 20 2d 3e | 20 50 31 29 2c 20 30 2e |&(New ->| P1), 0.|
|00004b10| 30 2c 20 30 2e 30 2c 20 | 30 2e 30 29 3b 0d 20 20 |0, 0.0, |0.0);. |
|00004b20| 4d 61 6b 65 5f 56 65 63 | 74 6f 72 20 28 26 28 4e |Make_Vec|tor (&(N|
|00004b30| 65 77 20 2d 3e 20 50 32 | 29 2c 20 31 2e 30 2c 20 |ew -> P2|), 1.0, |
|00004b40| 30 2e 30 2c 20 30 2e 30 | 29 3b 0d 20 20 4d 61 6b |0.0, 0.0|);. Mak|
|00004b50| 65 5f 56 65 63 74 6f 72 | 20 28 26 28 4e 65 77 20 |e_Vector| (&(New |
|00004b60| 2d 3e 20 50 33 29 2c 20 | 30 2e 30 2c 20 31 2e 30 |-> P3), |0.0, 1.0|
|00004b70| 2c 20 30 2e 30 29 3b 0d | 20 20 4d 61 6b 65 5f 56 |, 0.0);.| Make_V|
|00004b80| 65 63 74 6f 72 20 28 26 | 28 4e 65 77 20 2d 3e 20 |ector (&|(New -> |
|00004b90| 4e 31 29 2c 20 30 2e 30 | 2c 20 31 2e 30 2c 20 30 |N1), 0.0|, 1.0, 0|
|00004ba0| 2e 30 29 3b 0d 20 20 4d | 61 6b 65 5f 56 65 63 74 |.0);. M|ake_Vect|
|00004bb0| 6f 72 20 28 26 28 4e 65 | 77 20 2d 3e 20 4e 32 29 |or (&(Ne|w -> N2)|
|00004bc0| 2c 20 30 2e 30 2c 20 31 | 2e 30 2c 20 30 2e 30 29 |, 0.0, 1|.0, 0.0)|
|00004bd0| 3b 0d 20 20 4d 61 6b 65 | 5f 56 65 63 74 6f 72 20 |;. Make|_Vector |
|00004be0| 28 26 28 4e 65 77 20 2d | 3e 20 4e 33 29 2c 20 30 |(&(New -|> N3), 0|
|00004bf0| 2e 30 2c 20 31 2e 30 2c | 20 30 2e 30 29 3b 0d 20 |.0, 1.0,| 0.0);. |
|00004c00| 20 4e 65 77 20 2d 3e 20 | 42 61 73 65 44 65 6c 74 | New -> |BaseDelt|
|00004c10| 61 20 3d 20 30 2e 30 3b | 0d 20 20 4e 65 77 20 2d |a = 0.0;|. New -|
|00004c20| 3e 20 44 65 67 65 6e 65 | 72 61 74 65 5f 46 6c 61 |> Degene|rate_Fla|
|00004c30| 67 20 3d 20 46 41 4c 53 | 45 3b 0d 0d 20 20 2f 2a |g = FALS|E;.. /*|
|00004c40| 20 4e 4f 54 45 3a 20 44 | 6f 6d 69 6e 61 6e 74 5f | NOTE: D|ominant_|
|00004c50| 41 78 69 73 20 61 6e 64 | 20 76 41 78 69 73 20 61 |Axis and| vAxis a|
|00004c60| 72 65 20 63 6f 6d 70 75 | 74 65 64 20 77 68 65 6e |re compu|ted when|
|00004c70| 20 50 61 72 73 65 5f 54 | 72 69 61 6e 67 6c 65 20 | Parse_T|riangle |
|00004c80| 63 61 6c 6c 73 0d 20 20 | 20 43 6f 6d 70 75 74 65 |calls. | Compute|
|00004c90| 5f 54 72 69 61 6e 67 6c | 65 2e 20 20 2a 2f 0d 0d |_Triangl|e. */..|
|00004ca0| 20 20 72 65 74 75 72 6e | 20 28 4e 65 77 29 3b 0d | return| (New);.|
|00004cb0| 20 20 7d 0d 0d 76 6f 69 | 64 20 44 65 73 74 72 6f | }..voi|d Destro|
|00004cc0| 79 5f 54 72 69 61 6e 67 | 6c 65 20 28 4f 62 6a 65 |y_Triang|le (Obje|
|00004cd0| 63 74 29 0d 4f 42 4a 45 | 43 54 20 2a 4f 62 6a 65 |ct).OBJE|CT *Obje|
|00004ce0| 63 74 3b 0d 20 20 7b 0d | 20 20 66 72 65 65 20 28 |ct;. {.| free (|
|00004cf0| 4f 62 6a 65 63 74 29 3b | 0d 20 20 7d 0d 00 00 00 |Object);|. }....|
|00004d00| 00 00 01 00 00 00 01 6e | 00 00 00 6e 00 00 00 3e |.......n|...n...>|
|00004d10| 20 3d 20 28 46 49 4e 49 | 53 48 20 2a 29 20 6d 61 | = (FINI|SH *) ma|
|00004d20| 6c 6c 6f 63 20 28 73 69 | 7a 65 6f 66 20 28 46 49 |lloc (si|zeof (FI|
|00004d30| 0a 54 52 49 41 4e 47 4c | 45 2e 43 00 02 00 00 00 |.TRIANGL|E.C.....|
|00004d40| 54 45 58 54 4d 50 53 20 | 01 08 ff ff ff ff 00 00 |TEXTMPS |........|
|00004d50| 00 00 54 45 58 54 4d 50 | 53 20 01 08 ff ff ff ff |..TEXTMP|S ......|
|00004d60| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004d70| 00 00 a8 f1 e0 98 00 00 | 4c 7d 00 00 01 ac 65 6e |........|L}....en|
|00004d80| 74 20 20 20 20 3d 20 30 | 2e 31 3b 0d 20 20 4e 65 |t = 0|.1;. Ne|
|00004d90| 77 2d 3e 44 69 66 66 75 | 73 65 20 20 20 20 3d 20 |w->Diffu|se = |
|00004da0| 30 2e 36 3b 0d 20 20 4e | 65 77 2d 3e 42 72 69 6c |0.6;. N|ew->Bril|
|00004db0| 6c 69 61 6e 63 65 20 3d | 20 31 2e 30 3b 0d 20 20 |liance =| 1.0;. |
|00004dc0| 4e 65 77 2d 3e 49 6e 64 | 65 78 5f 4f 66 5f 52 65 |New->Ind|ex_Of_Re|
|00004dd0| 66 72 61 63 74 69 6f 6e | 20 3d 20 31 2e 30 3b 0d |fraction| = 1.0;.|
|00004de0| 20 20 4e 65 77 2d 3e 52 | 65 66 72 61 63 74 69 6f | New->R|efractio|
|00004df0| 6e 20 3d 20 30 2e 30 3b | 0d 20 20 4e 65 77 2d 3e |n = 0.0;|. New->|
|00004e00| 00 00 00 48 00 09 4d 6f | 6e 61 63 6f 00 2a 2a 2a |...H..Mo|naco.***|
|00004e10| 2a 2a 2a 2a 2a 2a 2a 2a | 2a 2a 2a 2a 2a 2a 2a 2a |********|********|
|00004e20| 2a 0d 2a 20 20 20 00 06 | 00 04 00 3c 00 24 01 dd |*.* ..|...<.$..|
|00004e30| 02 3d 00 3c 00 24 01 dd | 02 3d a8 f1 e0 98 00 00 |.=.<.$..|.=......|
|00004e40| 00 00 00 00 00 00 00 00 | 00 00 01 00 00 00 00 1e |........|........|
|00004e50| 00 3c 00 24 01 dd 02 3d | 00 3c 00 24 01 dd 02 3d |.<.$...=|.<.$...=|
|00004e60| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004e70| 01 00 00 00 01 6e 00 00 | 00 6e 00 00 00 3e 00 8d |.....n..|.n...>..|
|00004e80| 3b f8 18 3e 00 00 00 1c | 00 3e 00 00 4d 50 53 52 |;..>....|.>..MPSR|
|00004e90| 00 01 00 0a 03 ed ff ff | 00 00 00 00 00 00 00 00 |........|........|
|00004ea0| 03 f0 ff ff 00 00 00 4c | 00 8f 98 64 00 00 00 00 |.......L|...d....|
|00004eb0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004ec0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004ed0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004ee0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00004ef0| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
+--------+-------------------------+-------------------------+--------+--------+